取消 .on 事件 listener/callback
Cancel .on event listener/callback
我有以下代码
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')
的 callback/event
我尝试将逻辑放在 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');
}
我有以下代码
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');
}