钩子API

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

注意:编辑器中还有一个hooks API,但它还不够成熟,因此目前未提供通用使用文档。

RED.hooks API

RED.hooks.add( hookName, handlerFunction )

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

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

可以选择性地为钩子添加一个标签后缀 - onSend.my-hooks。 然后可以使用RED.hooks.remove通过该标签来移除处理程序。

当被调用时,钩子处理程序将接收一个单独的载荷对象作为参数 - 其具体内容将取决于特定钩子的定义。

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

当处理程序完成其工作时,它必须执行以下操作之一:

  • 正常返回
  • 调用无参数的callback函数
  • 返回一个解析的promise

它对payload对象所做的任何修改都将被传递下去。

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

  • 返回 false (严格意义上的 false - 而非类假值)
  • 使用false调用回调函数
  • 返回一个解析为false值的Promise。

如果处理程序遇到需要记录的错误,它必须执行以下操作之一:

  • 抛出一个错误
  • 调用带有Error的回调函数
  • 返回一个以Error拒绝的Promise

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

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

RED.hooks.remove( hookName )

移除一个钩子处理程序。

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

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

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