Node-Red - 捕获错误 - node-red-contrib-composer

Node-Red - Catching Error - node-red-contrib-composer

我在点头红流中使用作曲家节点 node-red-contrib-composer

有些情况下节点会抛出错误

"Error trying invoke business network. Error: Peer has rejected transaction 'ce59c38741626ca5dbc1ae7055e0a52297ff99293751f796ed41d40b5cfc59e9' with code MVCC_READ_CONFLICT "

我可以在调试控制台中看到这个错误,但我无法使用 catch node-red 中可用的节点。我认为,在作曲家节点中,使用了以下代码:

    .catch((error) => {
                        node.error(error.message);
     });

如何在 node-red 中捕获此错误? 我想使用此错误消息来触发同一选项卡中的另一个流程。

如 Rocketchat 上所述 - 错误来自 Fabric - 可能希望有一个观察者在日志中发现错误(并将其拉入您的流程?即失败的事务 ID)另请参阅此处的信息关于避免碰撞 -> MVCC_READ_CONFLICT when submitting multiple transactions concurrently

MVCC_READ_CONFLICT 之类的错误当前无法被 node-red 流程中的 debug 节点捕获(即写入时间)(仅调试控制台中的 avl)。除非 node.error(msg) 或类似的东西在 composer node-red mpdule 中可用(例如 node.error("Error",msg))——这样 node-red 中的 catch 节点可用于捕获该错误并进行 re-sbumitting 一项受较早 'MVCC_READ_CONFLICT'.

约束的交易

抛开错误的具体细节不谈,您无法使用 Catch 节点处理此错误的原因是 Composer 节点报告错误的方式。

它正在用一个参数调用 node.error,这意味着它已被记录并且没有采取进一步的行动。

为了触发 Catch 节点,对 node.error 的调用必须提供第二个参数,即 Catch 节点应发送的消息对象。

我建议您针对作曲家节点提出问题以进行此更改。