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资源
已经是异步的。你可以叫它。要使其异步,不需要设置超时。似乎没有问题。