使用Promise.all调用多接口后如何选取指定JSON文件的数据
解决方案
Promise.all 返回的结果数组顺序和传入的请求顺序完全对应,你传入的第一个请求是批量查BNB余额的接口,第二个是单地址查指定代币余额的接口,最终拿到的data数组规则如下:
data[0]对应第一个balancemulti接口的完整返回值data[1]对应第二个tokenbalance接口的完整返回值
原来取单个钱包余额的逻辑只需要新增层级取第一个接口的返回即可,示例代码如下:
// 取第一个接口返回的余额数组 const balanceList = data[0].result // 两个钱包的BNB余额,注意接口返回原始值为wei单位,转成BNB需要除以1e18 const firstWalletBnb = balanceList[0].balance / 1e18 const secondWalletBnb = balanceList[1].balance / 1e18 // 若需要取第二个接口返回的指定代币余额,可直接按以下方式取值 const tokenBalance = data[1].result / 1e18
完整修改后的请求代码如下:
Promise.all([ fetch('https://api.bscscan.com/api?module=account&action=balancemulti&address=0xa3968Fba9D45D52b6b978f575934364ac2d5774c,0x121F0a592a25A52E8834C87005CbF4db000010Af&tag=latest&apikey=key'), fetch('https://api.bscscan.com/api?module=account&action=tokenbalance&contractaddress=0x7b50c95f065dc48a0ecf8e5f992bf9bb9f4299c5&address=0x121F0a592a25A52E8834C87005CbF4db000010Af&tag=latest&apikey=key') ]).then(function (responses) { return Promise.all(responses.map(function (response) { return response.json(); })); }).then(function (data) { // 处理批量BNB余额查询结果 const bnbBalances = data[0].result const wallet1Bnb = bnbBalances[0].balance / 1e18 const wallet2Bnb = bnbBalances[1].balance / 1e18 console.log('钱包1 BNB余额:', wallet1Bnb) console.log('钱包2 BNB余额:', wallet2Bnb) // 处理指定代币余额查询结果 const tokenBal = data[1].result / 1e18 console.log('钱包2对应代币余额:', tokenBal) }).catch(function (error) { console.log('请求出错:', error); });
内容的提问来源于stack exchange,提问作者Joshua Lloyd
相关产品推荐
相关产品推荐

