J'écris du code Javascript/jQuery qui nécessite de faire beaucoup de demandes à diverses API. J'ai rencontré ce problème plusieurs fois et c'est juste un exemple de base d'une instance de celui-ci.Éviter la répétition lors de l'utilisation de fonctions de rappel et de requêtes asynchrones
Le code envoie une requête asynchrone à un serveur et si une condition avec les données renvoyées n'est pas satisfaite, le code effectue une autre demande. La deuxième requête a un rappel qui contient beaucoup de la même logique que son parent. Je sais que j'évite la répétition en appelant le returnFunction
dans chaque rappel, mais y a-t-il un moyen d'éviter cela?
var container = [];
$.getJSON("http://www.url.com/api/?callback=?",
{ data: "mydata" },
function(data) {
if(!data.length) {
// No results
} else {
// Put the results into an array
$(data).each(function(k, v){
container.push(v.some_data);
});
// If the query did not return enough results
if(data.length < limit) {
var number_missing = limit - data.length;
// Get some more results and append to the array
myFunctionToGetSomethingElse(number_missing, function(response){
// Add these results to the array
$(response).each(function(k, v){
container.push(v.some_data);
});
// Do something with this data
returnFunction(response);
});
} else {
// Do something with the result
returnFunction(data);
}
}
});
Comment recommanderiez-vous d'éviter la répétition du code dans les rappels? Est-ce la seule façon possible?
accepté votre réponse parce que vous étiez d'abord. La réponse de tomg a été très utile cependant! On dirait un outil plutôt sympa. – betamax