如何更好地阻止一个承诺链并启动另一个承诺链?

时间:2016-03-07 11:10:05

标签: javascript promise

如果我有承诺链,并且它已成功完成

var a = new Promise(function(resolve, reject) {
        ...
    })
    .then(...)
    .then(...)
    .then(function(val) {
        console.log('done');
    })

我应该如何启动同步代码或其他承诺链?也许使用window.setTimeout()

我不想在最后的.then()中调用函数内部的同步代码,因为这个函数将一直存在,直到同步代码结束。而且我想将代码分成两部分,因为这些部分执行不同的逻辑。

修改

我应该这样做吗?

// this first pormise do auth work
var auth_work = function() {
    return new Promise(function(resolve, reject) {
            ...
        })
        .then(...)
        .then(...)
        .then(function(val) {
            console.log('done');
            // when auth procedure is finised  I want to download resources 
            return download_resources();
        });
}

var download_resources = function(){
    return new Promise(function(resolve, reject) {
            ...
        })
        .then(...)
        .then(...)
        .then(function(val){
            return do_actual_work();
        });

}

var do_actual_work = function() {
    return new Promise(function(resolve, reject) {
            ...
        })
        .then(...)
        .then(...)
        .then(function(val) {
            ...
        });
}
var p = auth_work();

如果在最后.then()我会做这个window.setTimeout(1, download_resources);

1 个答案:

答案 0 :(得分:0)

  

如果在最后.then()我会做window.setTimeout(1, download_resources);

,该怎么办?

这完全没有意义,原因有两个:

  • 人为地拖延任何东西都没有意义。您的承诺代码已经异步。
  • 您将无法从承诺链
  • 返回download_resources的结果