我写了一个小程序来帮助我理解如何在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