Я написал небольшую программу, которая поможет мне понять, как выполнять вложенные асинхронные обещания в jquery.Вложенные асинхронные jquery обещания
Я хочу вызвать две задачи в последовательности. Первая задача имеет две подзадачи, которые также вызывается последовательно. Это все.
Хотя это работает, я сомневаюсь, был ли это лучший способ использовать обещания. Необходимость создания нового отложенного для каждой задачи ощущается как запах кода для меня. Например, было бы лучше передать один отложенный объект и использовать только это? Благодаря!
https://plnkr.co/edit/dyFFqqZhCVuhBYCuWjzm?p=preview
doTasks().then(function(arg) {
console.log(arg)
})
function doTasks() {
var d = $.Deferred();
task1().then(function(arg) {
console.log(arg)
task2().then(function(arg) {
console.log(arg)
d.resolve('all tasks are done')
})
})
return d.promise();
}
function task1() {
var d = $.Deferred();
console.log("starting task1...")
setTimeout(function() {
task1A().then(function() {
task1B().then(function() {
d.resolve('task1 is done')
})
})
}, 10);
return d.promise();
}
function task1A() {
var d = $.Deferred();
console.log("starting task1A...")
setTimeout(function() {
console.log(" resolving task1A...")
d.resolve();
}, 1000);
return d.promise();
}
function task1B() {
var d = $.Deferred();
console.log("starting task1B...")
setTimeout(function() {
console.log(" resolving task1B...")
d.resolve();
}, 1000);
return d.promise();
}
function task2() {
var d = $.Deferred();
console.log("starting task2...")
setTimeout(function() {
d.resolve('task2 is done');
}, 1000);
return d.promise()
}
Почему бы вы предоставить этот ответ, когда мой ответ (от 20 минут раньше) в значительной степени обеспечивает всю ту же информацию? – jfriend00