Я пытаюсь добавить еще один асинхронный вызов в контракт существующего Deferred до того, как его состояние будет установлено на успех. Вместо того, чтобы пытаться объяснить это на английском языке, посмотрите на следующий псевдокод:
$.when(
$.ajax({
url: someUrl,
data: data,
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Call 1 done.')
jqXhr.pipe(
$.ajax({
url: someUrl,
data: data,
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Call 2 done.');
},
})
);
},
}),
$.ajax({
url: someUrl,
data: data,
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Call 3 done.');
},
})
).then(function(){ console.log('All done!'); });
По сути, вызов 2 зависит от результатов вызова 1. Я хочу, чтобы вызов 1 и вызов 3 выполнялись параллельно. После завершения всех трех вызовов я хочу, чтобы код All Done выполнялся. Насколько я понимаю, Deferred.pipe()
должен связать другой асинхронный вызов с данным отложенным, но на практике я всегда завершаю вызов 2 после завершения All Done.
Кто-нибудь знает, как заставить jQuery Deferred делать то, что я хочу? Будем надеяться, что решение не требует дальнейшего разделения кода на куски.
Спасибо за любую помощь.
ОБНОВЛЕНИЕ: см. мой дополнительный вопрос .