问题描述
我试图实现使用node-red从DB2表读取并插入到另一个DB2表中。为此,我正在使用dashdb模块(https://flows.nodered.org/node/node-red-nodes-cf-sqldb-dashdb)。我已确保源和目标中的列均匹配,并通过使用select query from source_table中的select *来测试是否在目标表中插入多条记录,然后针对插入表进行插入查询。 现在我还有另一件事,我需要在源表上触发多个选择查询,并将结果记录异步插入目标表中。 除了id =?之外,所有多个选择查询都将相同。 。所以我试图将查询放在msg.payload中,像这样的for循环
var queryID = 2; // max number of id to be querying against
for (i=1; i<=queryID; i++) {
console.log("COUNT",i)
msg.payload = `select * from source_table where id= ${i}` // only i changes
node.send(msg); // i pass it to next node which is dashBD out node responsible for selecting record from source table
}
但是这样做只会执行最后一个循环值2,而不执行结点操作。将i = 1的值发送到下一个结点。
有人可以在这里阐明一下吗:它将id = 2的结果两次插入目标表。相反,我想根据for循环i变量执行插入。这是图中的第二个节点模块功能
module.exports = function(RED) {
function fireMultipleQuery(nodeConfig) {
RED.nodes.createNode(this,nodeConfig);
var node = this;
node.on('input',function(msg) {
var queryID = 2; // max number of id to be querying against
for (i=1; i<=queryID; i++) {
console.log("COUNT",i)
msg.payload = `select * from source_table where id= ${i}` // only i changes
node.send(msg); // i pass it to next node which is dashBD out node responsible for selecting record from source table
});
}
RED.nodes.registerType("fire-query-node",fireMultipleQuery);
}
解决方法
NodeJS是参考语言传递。
因此,由于循环正在更新同一Example : let cartNumber = [{...},{...}]
{
cartNumber !== undefined && cartNumber.length < 3
? cartNumber.map((item) => {
return (
<li className="clearfix">
<img src={item.imgSrc} style={{ width: "30%" }} alt="item1" />
<span className="item-name" style={{ verticalAlign: "middle" }}>
{item.name}
</span>
<span className="item-price" style={{ verticalAlign: "middle" }}>
{item.price} kr
</span>
<span className="item-quantity" style={{ verticalAlign: "middle" }}>
Quantity: {item.quantity}
</span>
</li>
);
})
: null;
}
对象,因此它也在更改已发送的版本。
您可能希望克隆msg
或为每次发送创建一个新对象。
您可以使用msg