为什么Node-RED节点不允许多个输入?

时间:2019-05-09 12:39:18

标签: node-red

为清楚起见: 我并没有要求 如何 为函数实现多个输入,我已经知道了解决方法。我想知道 为什么 Node-RED开发人员会禁止这种功能。

允许对一个函数进行多次输入似乎很自然和自然。

例如:说我想创建一个函数Divide(dividend, divisor),该函数返回dividend除以divisor。在JavaScript中,它将是:

function Divide(dividend, divisor) {
  return dividend / divisor
}

使用Node-RED,相同的功能如下所示:

var dividend = 0
var divisor = 0

if (msg.topic == 'dividend')
{
    dividend = msg.payload
    context.set('dividend', dividend)
    divisor = context.get('divisor')
}
else if (msg.topic == 'divisor')
{
    divisor = msg.payload
    context.set('divisor', divisor)
    dividend = context.get('dividend')
}

return {payload:(dividend/divisor)};

(此外,我必须将主题“除数”和“除数”分配给输入,以使函数不会混淆哪个是哪个)

我知道这是因为Node-RED是基于消息而不是功能的,但是我真的不能成为唯一认为这对如此简单的任务来说是荒谬的工作的人,对吗?

我知道,如果我使用context节点并等待接收两条消息,则可以避免使用join,但是我希望我的函数在输入发生任何更改时进行更新,因为否则该函数的输出在收到第二条消息之前,它将是过时的。

我可以想象,如果开发人员实现了多个输入功能,则该功能将在其任何输入上接收到新消息时运行,并且由于默认情况下会保留任何给定线路上的消息,直到发送下一条消息为止,所以您不会不必担心使用context实现保留。

此外,如果您能够命名函数输入,则不必担心按主题对输入进行排序并为每个输入显式分配一个主题以支持此功能。

这是Node-RED的不足吗?还是我完全忘记了要点?

0 个答案:

没有答案