Node-Red:如何过快地停止节点处理?

Node-Red: How to stop nodes processing too quickly?

我目前正在 MS Excel 中创建一个仪表板,使用 Node-RED 从源系统获取数据。为了不必一直导入所有收集的数据,我创建了一个流程,使用“node-red-contrib-fs-ops 1.6”检查文件(特别是“ImportSuccess.csv”)是否存在。 0”,特别是 fs-ops-access。

如果否,则消息将进入一个连接节点并附加到一个数组。

如果是,那么ImportSuccess.csv应该被删除,触发这个的消息会得到“msg.complete”属性,并被传递到前面提到的Join-Node并触发它发送出去整个数组到一个 csv 文件中,覆盖它以前的内容。在 Excel 中,然后我从该 csv 文件中获取数据并创建一个新的“ImportSuccess.csv”来与 Node-RED 通信,告知我的工具已准备好接收新一批数据。

出现以下问题:由于检查是否存在和删除文件是两个不同的步骤,第二条消息可以成功通过存在性检查,导致存储 csv 文件被双重覆盖,从而导致数据丢失.

有没有办法防止这种情况发生?

流程图:

根据我的理解,在下一条消息通过“文件访问”节点之前,我需要“强制”上层分支完全完成。

通过编写我自己的功能节点找到解决方案 - ty 用于签入

编辑:如何使用函数节点解决问题

  1. 在 functionGlobalContext

    下使用 fs: require("fs") 编辑 Settings.js
  2. 编写函数节点如下:

var fs = global.get("fs");
var path = "Your Path";

if fs.existsSync(path){
    >Add attribute "complete" to msg for the Join Node to detect and trigger sending
    msg.complete = Boolean(1);
   
   >Delete File
   fs.unlinkSync(path);
}

return msg;