如何为函数传递内联异步回调函数?技术实现问询
解决内联异步回调的问题
没问题,这其实很容易解决——你只需要把事件回调直接声明成async箭头函数就行,不过有个关键细节要注意:异步操作的错误处理。
原代码的问题
你当前的回调是普通箭头函数,里面使用await会直接抛出语法错误,因为只有async函数内部才能使用await关键字。
修改后的完整代码
fraudListen = async () => { this.KYCinstance.events.ReportedFraud({ fromBlock: 0 }, async (error, event) => { // 先处理事件订阅本身的错误 if (error) { console.error('事件订阅失败:', error); return; } try { // 现在可以安全地使用await了 const returnVar = await doSomething(); console.log(returnVar); } catch (err) { // 捕获doSomething执行过程中的异步错误 console.error('执行doSomething出错:', err); } }); }
几个关键说明
- 直接给回调加上
async关键字:async (error, event) => { ... },这样回调就变成了异步函数,内部可以正常使用await - 处理事件订阅错误:web3的事件订阅可能在初始化或获取事件时出错,这个错误会通过回调的第一个参数
error传递,一定要先检查并处理 - 用
try/catch包裹异步操作:await后面的Promise如果拒绝(比如doSomething执行失败),会抛出错误,必须捕获避免未处理的Promise rejection,否则会在控制台产生警告甚至导致程序崩溃
如果你的doSomething已经在内部处理了所有错误,try/catch可以省略,但为了代码的健壮性,建议保留。
内容的提问来源于stack exchange,提问作者0TTT0
相关产品推荐
相关产品推荐

