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

Javascript 如何更好地停止一个承诺链并启动另一个承诺链?,javascript,promise,Javascript,Promise,如果我有承诺链,它成功地完成了 var a = new Promise(function(resolve, reject) { ... }) .then(...) .then(...) .then(function(val) { console.log('done'); }) 我应该如何启动同步代码或其他承诺链?可能使用window.setTimeout() 我不想在last.then()中调用函数内部的同步代码,因为该函

如果我有承诺链,它成功地完成了

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();
如果在last.then()中,我将执行这个
window.setTimeout(1,下载\u资源)

如果在最后一个
.then()
中,我将在
窗口中执行此操作。setTimeout(1,下载\u资源)

这完全没有道理,原因有二:

  • 人为地拖延是没有意义的。您的承诺代码已经是异步的

  • 您将无法从承诺链返回下载资源的结果

您是否尝试创建一个新的承诺,就像您在示例中所做的那样?那么:var b=new Promise(..)到底是什么问题?您所说的“此函数将一直保持活动状态,直到同步代码结束”是什么意思?
setTimeout
不是同步的?您应该提示它,然后像使用任何其他承诺返回函数一样使用它。是否要调用几个promise unsync,等待它和,然后调用finish?如果是,请尝试何时何地开始另一个承诺链?它和你已经拥有的有什么关系?你能给我们举个例子吗?如果你有一个实际的问题,你正试图通过使用
setTimeout
来解决,请说明这个问题是什么。不,我的问题不在使用
setTimeout
,失去范围或类似的东西。我不需要返回
下载资源的结果。我尝试以异步方式运行函数。我想我使用
setTimeout()
将函数放入事件循环中。完成当前承诺链。和javascript vm,自己调用我的函数。
下载\u资源
已经是异步的。你可以叫它。要使其异步,不需要设置超时。似乎没有问题。