Если у меня есть два вложенных отложенных объекта, и я жду, чтобы они закончили, как я могу убедиться, что их then
заканчивается перед внешними then
триггерами?Убедитесь, что внутреннее отложенное завершено перед внешним «затем»
$.when($.ajax({
method: 'PUT',
url: someURL,
data: {
// My data
},
callback: function(r) {
var deferred1 = $.Deferred();
var deferred2 = $.Deferred();
$.ajax({
method: 'PUT',
url: url1,
data: {
// My data
}
}).complete(deferred1.resolve);
$.ajax({
method: 'PUT',
url: url2,
data: {
// My data
}
}).complete(deferred2.resolve);
$.when(deferred1, deferred2).then(function() {
self.parent.container.dialog('close').remove();
self.parent.configurator.container.dialog('close').remove();
});
},
})).then(function() {
// Some work; e.g. close a loading spinner
});
С выше кодой, сразу же, как deferred1
и deferred2
разрешается, наружная then
называется перед тем внутренние then
Вам необходимо остановиться и прочитать учебное пособие, вместо того чтобы продолжать пытаться запутаться вперёд. [Это хороший вариант] (http://joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/). Ваш код на самом деле не спасен, каждое использование обещаний здесь неверно. – meagar