Web3调用async异步方法返回Promise { <pending> }问题求助
问题诊断
- async函数返回值特性:所有被
async关键字修饰的函数,执行后默认返回Promise实例。你直接调用getBalance后没有通过await或者.then()处理异步结果,直接打印变量拿到的就是处于未完成状态的Promise { <pending> }。 - 代码拼写错误:函数定义的形参写为
adress(缺失字母d),但函数内部调用web3.eth.getBalance时传入的变量名是address,会导致参数传递失效,即使处理了异步逻辑也拿不到正确结果。
修复方案
方式1:await 接收异步结果
await必须在async标记的作用域内使用,可通过立即执行异步函数包裹业务逻辑实现:
// 修正形参拼写,同时将查询结果return const getBalance = async (address) => { try { const wei = await web3.eth.getBalance(address); return wei; } catch (err) { console.error("查询余额失败:", err); } }; // 立即执行异步函数,用await接收返回结果 (async () => { const balanceWallet = await getBalance(address); console.log(balanceWallet); })();
方式2:.then 链式调用处理异步结果
const getBalance = async (address) => { try { const wei = await web3.eth.getBalance(address); return wei; } catch (err) { console.error("查询余额失败:", err); } }; // 通过.then回调拿到异步返回的余额结果 getBalance(address).then(balanceWallet => { console.log(balanceWallet); });
内容的提问来源于stack exchange,提问作者Christian Osorio
相关产品推荐
相关产品推荐

