Hooks API

Hooks API提供了一种在运行时操作的某些关键点插入自定义代码的方法。

注意:编辑器中也有hooks API,但由于其不够成熟,因此当前没有为一般使用进行文档化。

RED.hooks API

RED.hooks.add( hookName, handlerFunction )

注册一个新的钩子处理程序。

hookName是要为其注册处理程序的钩子的名称。

它可以选择性地以钩子的标签作为后缀 - onSend.my-hooks。 该标签可以与RED.hooks.remove一起使用,以移除处理程序。

调用时,钩子处理程序将使用单个有效载荷对象被调用 - 其详细信息将特定于钩子。

处理程序可以接受一个可选的第二个参数 - 当处理程序完成工作时要调用的回调函数。

当处理程序完成工作时,必须:

  • 正常返回
  • 调用回调函数而不带参数
  • 返回一个解析的承诺

它对有效载荷对象所做的任何修改将被传递。

如果处理程序想要停止进一步处理事件(例如,它不希望将消息传递到流中的下一个节点),它必须:

  • 返回false(严格为false - 而不是类似于false的值)
  • 调用回调函数并传递false
  • 返回一个解析为值false的承诺。

如果处理程序遇到需要记录的错误,它必须:

  • 抛出一个错误
  • 调用回调函数并传递错误
  • 返回一个拒绝的承诺并带有错误

如果一个函数被定义为接受回调函数的两个参数版本,它必须使用该回调 - 它返回的任何值将被忽略。

 RED.hooks.add("preDeliver.my-hooks", (sendEvent) => {
     console.log(`即将传递给 ${sendEvent.destination.id}`);
 });

RED.hooks.remove( hookName )

移除一个钩子处理程序。

只有使用标签名称注册的处理程序(例如onSend.my-hooks)才可以被移除。

要移除具有给定标签的所有钩子,可以使用*.my-hooks

```javascript RED.hooks.remove(“*.my-hooks”);