Обновление: я получу лучший ответ на этот вопрос, если вы используете jQuery, см. Мое обновление под заголовком: Использование jQuery Deffered
Старый ответ:
Вы также можете использовать Array.reduceRight
(когда это возможно), чтобы обернуть вызовы $.ajax
и преобразовать список, например: [resource1, resource2]
в $.ajax({url:resource1,success: function(...) { $ajax({url: resource2...
(трюк, который я узнал из Haskell и его сложение / сложение справа функция).
Вот пример:
var withResources = function(resources, callback) {
var responses = [];
var chainedAjaxCalls = resources.reduceRight(function(previousValue, currentValue, index, array) {
return function() {
$.ajax({url: currentValue, success: function(data) {
responses.push(data);
previousValue();
}})
}
}, function() { callback.apply(null, responses); });
chainedAjaxCalls();
};
Тогда вы можете использовать:
withResources(['/api/resource1', '/api/resource2'], function(response1, response2) {
// called only if the ajax call is successful with resource1 and resource2
});
Использование jQuery Deffered
Если вы используете jQuery, вы можете воспользоваться jQuery Deffered , используя функцию jQuery.when()
:
jQuery.when($.get('/api/one'), $.get('/api/two'))
.done(function(result1, result2) {
/* one and two is done */
});