Мне нужно выполнить функцию после рекурсивных асинхронных вызовов ajax. у меня есть:Выполнить функцию после рекурсивных асинхронных вызовов ajax
var tree = [1, 2 ,3, 4];
recursion(0);
function recursion(i) {
$.ajax('http://example.com/' + tree[i])
.done(function (data) {
// data is array
++i;
if (tree[i] !==undefined) {
$.each(data, function() {
recursion(i);
});
}
});
}
И я хочу после всех звонков, когда они сделаны сделать:
recursion(0).done(function() {alert('All calls are done!')});
Я знаю, я должен использовать $ .Deferred из JQuery, но Аякс вызова возвращения обещания слишком. Я пытаюсь использовать $ .Deferred, но я столкнулся с проблемой, с петлей в этом месте:
$.each(data, function() {
recursion(i);
});
Пожалуйста, помогите мне.
Ваш 'recursion()' даже не возвращает обещание. – Bergi
Посмотрите на [этот вопрос] (http://stackoverflow.com/q/21762982/1048572), хотя и [здесь] (http: // stackoverflow.com/q/5627284/1048572) о том, как ждать нескольких 'recurse()' promises – Bergi
Почему ваш рекурсивный вызов в цикле над 'data', когда он фактически не использует' data' для рекурсивного вызова? ? Нужно ли вообще быть рекурсивным? Возможно, вы захотите опубликовать свой фактический код. – Bergi