我有一个需要按顺序执行的test_func,即; first_call,second_call,third_call。
当前输出: -
started == first_call
VM81:49 status in : first_call pending
VM81:47 started == second_Call
VM81:47 started == third_Call
VM81:49 status in : second_Call pending
VM81:49 status in : third_Call pending
function test_func(call_from){
var deferred = $.Deferred();
console.log('started ==',call_from)
setTimeout(function(){
console.log("status in :",call_from + ' ' + deferred.state());
deferred.resolve();
},5000);
return deferred.promise();
};
test_func('first_call').then(function(){
test_func('second_Call')
}).then(function(){
test_func('third_Call')
})
答案 0 :(得分:6)
确保您使用Promise
向Promise
链中的每个return
下游发送,例如:
test_func('first_call')
.then(function(){
return test_func('second_Call');
})
.then(function(){
return test_func('third_Call');
})
.then(function() {
console.log('done');
});
并且看到更新的js小提琴来证明它: https://jsfiddle.net/44Lm3at0/1/
要添加,如果您不return
Promise
,则链中的每个项目将并行运行(偏移一点时间)而不是顺序运行。通过返回它们,您通知JavaScript您想要等待"让Promise
完成,允许then
链正常工作。