我有一系列 promise 链,需要足够的时间才能完成。以下是示例链设置:
myJob1()
.then(myJob2)
.then(myJob3)
.then(myJob4)
.then(myJob5)
.then(myJob6)
.catch(myJobError);
在这个作业运行的同时,如果UI上的人想取消它,无论在哪个阶段/功能执行中,如何取消它?
可能的解决方案是什么?
最佳答案
修改多个作业功能的代码的一种替代方法可能是检查作业之间的用户取消标志。如果这种检查的粒度不太精确,那么您可以异步设置一个(某种程度上)全局取消标志并按照以下行进行:
let userCancelled = false;
let checkCancel = function( data) {
if( userCancelled)
throw new Error( "cancelled by user"); // invoke catch handling
return data; // pass through the data
}
myJob1()
.then(myJob2).then( checkCancel)
.then(myJob3).then( checkCancel)
.then(myJob4).then( checkCancel)
.then(myJob5).then( checkCancel)
.then(myJob6).then( checkCancel)
.catch(myJobError);
不要忘记,如果您确实检查了作业中的取消标志,您所需要做的就是抛出一个错误,让它在 promise 链中冒泡。
关于javascript - NodeJS - 如果收到事件,则终止 promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45796488/