javascript - NodeJS - 如果收到事件,则终止 promise 链

标签 javascript node.js promise cancellation

我有一系列 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/

相关文章:

java - 获取 javascript 数组中的 bean 数据

node.js - 从 Node 插件回复 Dbus 调用时出现 Bluez MediaEndpoint1 超时问题

javascript - Node.JS:写入文件时 Promise 产生 null

javascript - Promise.resolve().then vs setImmediate vs nextTick

javascript - 如何在 grecaptcha.execute() 完成执行后调用函数 - 由事件触发?

javascript - 是否可以使用 chrome 的 devtools 检查函数参数的类型?

javascript - 如何使用选项值禁用文本框

javascript - 从 HTML 中的单独 Javascript 文件调用函数不起作用

javascript - 从父窗口javascript调用子窗口函数

node.js - 未收到 Firebase 云消息传递收据