Hooks API

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

注意:编辑器中也有一个 hooks API,但它不太成熟,目前尚未为一般用途编写文档。

RED.hooks API

RED.hooks.add( hookName, handlerFunction )

注册一个新的 hook 处理程序。

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

它可选择带有一个后缀,作为 hook 的标签 - onSend.my-hooks。该标签随后可与 RED.hooks.remove 一起使用以移除处理程序。

调用时,hook 处理程序将带有一个单一的有效负载对象——其详细信息将特定于该 hook。

处理程序可以接受一个可选的第二个参数——一个回调函数,在处理程序完成工作后调用。

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

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

它对有效负载对象所做的任何修改都将传递下去。

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

  • 返回 false(严格地是 false - 而不是类似 false 的值)
  • 使用 false 调用回调函数
  • 返回一个解析为值 false 的 Promise。

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

  • 抛出一个 Error
  • 使用 Error 调用回调函数
  • 返回一个以 Error 拒绝的 Promise

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

 RED.hooks.add("preDeliver.my-hooks", (sendEvent) => {
     console.log(`About to deliver to ${sendEvent.destination.id}`);
 });

RED.hooks.remove( hookName )

移除 hook 处理程序。

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

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

RED.hooks.remove("*.my-hooks");