向JavaScript承诺链添加终结器

向JavaScript承诺链添加终结器,javascript,promise,finalizer,Javascript,Promise,Finalizer,我正在寻找一种向JavaScript承诺链添加承诺的方法。在下面的代码实验中,我尝试将其用于此目的,但它不适合,因为它会立即执行,而不是等待其他步骤首先完成。我正在寻找一个解决方案,让我推迟清理步骤,直到不再需要承诺 Promise.resolve() .finally(()=>console.log('cleanup')) 。然后(()=>console.log('initialize')) 。然后(()=>console.log('do things'))可能我遗漏了一些细节,但如果意图是

我正在寻找一种向JavaScript承诺链添加承诺的方法。在下面的代码实验中,我尝试将其用于此目的,但它不适合,因为它会立即执行,而不是等待其他步骤首先完成。我正在寻找一个解决方案,让我推迟清理步骤,直到不再需要承诺

Promise.resolve()
.finally(()=>console.log('cleanup'))
。然后(()=>console.log('initialize'))

。然后(()=>console.log('do things'))
可能我遗漏了一些细节,但如果意图是在其他承诺之后执行
最终
,则将其移动到堆栈末尾:

Promise.resolve()
。然后(()=>console.log('initialize'))
.然后(()=>console.log('do things'))

最后(()=>console.log('cleanup'))
在本例中,您可以像这样利用
Promise.all()

constmypromise=newpromise((resolve,reject)=>setTimeout(resolve,100,'done'))。然后((x)=>{console.log('a');return x;})。然后((y)=>{console.log('b');return y;})。然后((z)=>{console.log('c');return z;});
承诺。所有([myPromise])。然后((值)=>{
console.log(值);

});问题在于,您的
then()
中没有人返回承诺

(函数(){
"严格使用",;
让promise=promise.resolve()
。然后((数据)=>{
console.log('initialize')
返回承诺。解决('foo')
})
.然后((数据)=>{//data='foo'
console.log('do things')
返回新承诺((解析,拒绝)=>setTimeout(解析,2000))
})
.最后(()=>{
console.log('2秒后,清除')
})
然后(()=>console.log('do more things'))

})();
您可以使用
Async/wait
进行此操作,并将清理代码始终放在末尾。我的意图是在将句柄向前传递给某个神秘代码之前定义清理步骤,因为我无法强制神秘代码在完成神秘操作后将承诺传递给我。