You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node-RED中让node.on("close")实现同步串行执行?

解决Node-RED节点close事件异步任务串行执行问题

要让多个相同节点的close事件异步任务串行执行,避免并发导致的顺序混乱,你可以通过全局Promise队列控制任务执行顺序,确保前一个节点的异步任务完成后,再启动下一个节点的任务。

实现步骤:

  1. 在节点模块文件的全局作用域(所有节点实例共享的区域)定义一个串行队列,初始化为已完成的Promise,保证第一个任务能立即执行:
// 全局串行队列,用于控制close事件的异步任务顺序
let closeTaskQueue = Promise.resolve();
  1. 修改node.on("close")的回调逻辑,将当前节点的异步任务加入队列,通过then链式调用实现串行:
node.on("close", async (removed, done) => {
    if (removed) {
        // 将当前节点的close任务追加到串行队列
        closeTaskQueue = closeTaskQueue.then(async () => {
            console.log("here1");
            try {
                await utils.deletePlcOption(node);
            } catch (err) {
                utils.errorHandler(err, node);
            }
            console.log("here2");
        });
        // 等待当前任务执行完成
        await closeTaskQueue;
    }
    done();
});

原理说明:

  • 全局的closeTaskQueue会维护一个Promise链式调用序列,每个节点的close任务都会被追加到序列末尾。
  • 只有前一个任务的Promise完成后,才会执行下一个任务的逻辑,从而保证两个节点的任务按照here1 → here2 → here1 → here2的顺序执行。

内容的提问来源于stack exchange,提问作者Jantoma21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:41:02