我有一个嵌套的AJAX调用,其中每个级别必须等待前一个级别在执行之前完成。我正在使用承诺,但我不知道它是如何帮助以下情况的。
var me = this;
initA()
.done(function () {
initB.apply(me, arguments)
.done(function () {
initC.apply(me, arguments)
.done(function () {
initD.apply(me, arguments)
});
});
});
有没有更好的方法来执行上述嵌套?
答案 0 :(得分:1)
使用then
方法,只要您的函数返回一个promise,promise库将尝试解析返回的promise,然后再转到下一个then
回调。有了这个,您只需bind
而不是apply
。
在下面的示例中,我使用的是jQuery的延迟对象,但我相信大多数promise库都应该是相同的
var me = {something:"world"};
function dotimeOut(){
console.log(this);
var def = jQuery.Deferred();
setTimeout(function(){
def.resolve(1);
},1000);
return def.promise();
}
dotimeOut()
.then(dotimeOut.bind(me))
.then(dotimeOut.bind(me))
.then(dotimeOut.bind(me));
/* This is the same as doing the below
initA()
.then(function(){
return initB.apply(me,arguments);
})
.then(function(){
return initC.apply(me,arguments);
})
.then(function(){
return initD.apply(me,arguments);
})
*/
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>