微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

取消 .on 事件监听器/回调

如何解决取消 .on 事件监听器/回调

我有以下代码

const broadcastTxn = await web3.eth
  .sendSignedTransaction(txn.signed)
  .on('receipt',(r) => console.log('Receipt',r))
  .on('confirmation',(c) => this.handleConfirmation(c,txn));

...

handleConfirmation(c: number,txn: Transaction): void {
  // do some stuff
}

我返回了多个 confirmations,但在第 3 个之后我想取消继续侦听 .on('confirmation') 的回调/事件

我尝试在 handleConfirmation 函数中放入逻辑来抛出

handleConfirmation(c: number,txn: Transaction): void {
  // do some stuff
  if (c >= 3) throw new Error('cancelling callback');
}

但这不起作用,它不断被调用

结束 .on('confirmation') 侦听器的正确方法是什么?

es2017 & Node 14.9.0

解决方法

@ThomasSablik 为我指明了正确的方向。我需要在不使用 await 的情况下捕获对象。然后我可以引用它并在之后使用 await。下面的解决方案

const signedTxnListener = web3.eth
  .sendSignedTransaction(txn.signed)
  .on('receipt',(r) => console.log('Receipt',r))
  .on('confirmation',(c) => this.handleConfirmation(c,txn));

await signedTxnListener
...

handleConfirmation(c: number,txn: Transaction): void {
  // do some stuff
  if (c >= 3) signedTxnListener.off('confirmation');
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。