在链中使用承诺和非承诺

时间:2015-06-09 13:56:49

标签: javascript jquery promise jquery-deferred

我有一系列的承诺(主要是ajax调用,但有一些默认)。

我这样称呼他们,我的问题是我还需要混合一些不返回承诺的标准函数,我已经下面了,这是正确的方法吗?

基本上我希望承诺A,B和C运行,然后执行我的非承诺方法,一旦完成,继续承诺D和E.

this.promiseA()
.then(this.promiseB)
.then(this.promiseC)
.then(function(){

    //do some methods that do not return promises
})
.then(this.promiseD)
.then(this.promiseE);

2 个答案:

答案 0 :(得分:0)

this.promiseA()
.then(this.promiseB)
.then(this.promiseC)
.then(function(){

    //do some methods that do not return promises
    // modify original promise here , else original promise
    // passed to next `.then` in chain
    // return $.when(true); 
})
.then(this.promiseD)
.then(this.promiseE);

答案 1 :(得分:0)

then函数可以发回任何内容,包括undefined。如果需要,任何东西都封装在一个新的Promise中,这样链就可以继续。

如果您的函数返回Promise或者thenable,则在此对象完全填充时链将继续。然后,promiseD将收到此值的已解决值。

如果函数返回立即值或null或未定义,则链将立即继续。 promiseD将获得上述价值。

是的,你的解决方案是正确的。