Я пишу некоторый код Javascript / jQuery, который требует от меня большого количества запросов к различным API. Я сталкивался с этой проблемой много раз, и это лишь один из основных примеров.
Код выполняет асинхронный запрос к серверу, а затем, если условие с возвращенными данными не выполняется, код выполняет другой запрос. Второй запрос имеет обратный вызов, который содержит большую часть той же логики, что и его родитель. Я знаю, что избегаю повторения, вызывая returnFunction
в каждом обратном вызове, но есть ли способ избежать этого в целом?
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);
}
}
});
Как бы вы порекомендовали мне избегать повторения кода внутри обратных вызовов? Это единственный возможный способ?