使用promises更好地处理AJAX嵌套?

时间:2014-11-10 02:33:25

标签: javascript ajax promise

我有一个嵌套的AJAX调用,其中每个级别必须等待前一个级别在执行之前完成。我正在使用承诺,但我不知道它是如何帮助以下情况的。

var me = this;

initA()
    .done(function () {
        initB.apply(me, arguments)
            .done(function () {
                initC.apply(me, arguments)
                    .done(function () {
                        initD.apply(me, arguments)
                    });
            });
    });

有没有更好的方法来执行上述嵌套?

1 个答案:

答案 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>