如何使用 Node-RED 组合两个 SQLite 查询

How to combine two SQLite queries using Node-RED

我有两个 sql 查询要 运行 针对同一个数据库。我想将两个查询的结果组合成一个对象,这样我就可以在以后的 html 模板中使用它。

运行 它们都按预期单独工作,并且 returns 一个具有来自数据库的正确数据的对象。

下面是 Node-RED 流程的屏幕截图。

在我的组合函数中,我尝试了以下代码,但它只给了我两个单独的数组,其中包含一个对象:

var myArray = [];
var ob = {};

for(var i = 0; i < msg.payload.length; i++){
    ob = msg.payload[i];
    myArray.push(ob);
}
msg.topic = myArray;
return msg

我相信这是因为查询是一个接一个地执行的。有没有办法同时执行它们并存储结果?

用连接节点替换您的 combine 功能节点,将其设置为在收到 2 条消息时连接,如果您尝试使用这些选项,它应该能够连接 2 个数组

一个常见的误解是将两条路径连接到一个函数节点会以某种方式组合两个 msg 对象——由于单线程 nodejs 流处理器,它们保证在不同的时间到达...

将注入的事件拆分为两个并行路径没有任何好处,这两个路径需要在稍后加入才能被处理。相反,更容易触发第一个查询(例如 getSchedules),将其连接到一个更改节点,您可以在其中将输出结果移动到类似 msg.schedules 的位置,最后将更改节点连接到第二个查询(例如 getExams)。如果查询节点表现良好,第二个节点应该将考试结果放入 msg.payload 中,而不接触传入的 msg.schedules 数据。

此时,您应该有一个包含两组数据的 msg 对象——因此不需要组合函数。虽然您有 2 个串联的查询节点,但它们可以使用相同的配置节点,因此它们共享到数据库的连接。