如何更好地停止一个承诺链并开始另一个承诺链

How to better stop one promise chain and start another?

本文关键字:一个承诺 开始 何更好 更好      更新时间:2023-09-26

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

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

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

我不想在 last .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);

如果在最后.then()我会这样做怎么办window.setTimeout(1, download_resources);

这完全没有意义,原因有二:

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