使用 Web3.js,我如何在合約的多個實例上呼叫一個函式,然後將它們的結果儲存在一個數組中?
使用 Web3.js,我如何在合約的多個實例上呼叫一個函式,然後將它們的結果儲存在一個數組中?我試過 .map 和 .forEach,但它們沒有返回我期望的對象。
當我在一個實例上呼叫該函式時,我能夠獲得理想的結果:
let giftStats = await SmartGift( '0xbb6810057e1D82deE83A981b002F2E0C60293a27' ) .methods.getGiftStats() .call() console.log(giftStats)
Result { '0': '0xfAA7541C5cBe22E4518736D2b5fC34D07347eE45', '1': '0x0000000000000000000000000000000000000000', '2': '0x0000000000000000000000000000000000000000', '3': '0', '4': '0', '5': '0', '6': '100', '7': '0', '8': false, '9': false, '10': '' }
我正在尋找一種方法,使我能夠將兩個像上面的對像一樣儲存在一個數組中。但是當我嘗試在地址數組上呼叫 map() 或 forEach() 時,結果數組不是我所期望的。
嘗試 1:.map()
const recipientGifts = ['0xAEaadCd9499127Ae0826aC2E918372927E4B55D4','0xbb6810057e1D82deE83A981b002F2E0C60293a27'] let giftStats = await recipientGifts.map((address) => { JSON.stringify( SmartGift(address) .methods.getGiftStats() .call() ) console.log(giftStats)
$$ undefined, undefined $$
嘗試 2:.forEach()
const recipientGifts = ['0xAEaadCd9499127Ae0826aC2E918372927E4B55D4','0xbb6810057e1D82deE83A981b002F2E0C60293a27'] let giftStats = [] await recipientGifts.forEach((address) =>giftStats.push(SmartGift(address) .methods.getGiftStats() .call() ))
console.log (giftStats)
[ Promise { _bitField: 0, _fulfillmentHandler0: undefined, _rejectionHandler0: undefined, _promise0: undefined, _receiver0: undefined }, Promise { _bitField: 0, _fulfillmentHandler0: undefined, _rejectionHandler0: undefined, _promise0: undefined, _receiver0: undefined } ]
第二種方法非常接近,但您應該嘗試將 await 放在 forEach 中,因為這會返回一個承諾
await recipientGifts.forEach(async(address) => giftStats.push(await SmartGift(address) .methods.getGiftStats() 。稱呼() ))
我最初想只使用函式式程式來解決這個問題,避免循環。但我讓它使用
for
循環工作。let giftStats = [] for (let i = 0; i < recipientGifts.length; i++) { giftStats.push( await SmartGift( recipientGifts[i]) .methods.getGiftStats() .call() ) }
console.log (giftStats)
[ Result { '0': '0xfAA7541C5cBe22E4518736D2b5fC34D07347eE45', '1': '0x0000000000000000000000000000000000000000', '2': '0x0000000000000000000000000000000000000000', '3': '0', '4': '0', '5': '0', '6': '5000', '7': '0', '8': false, '9': false, '10': '' }, Result { '0': '0xfAA7541C5cBe22E4518736D2b5fC34D07347eE45', '1': '0x0000000000000000000000000000000000000000', '2': '0x0000000000000000000000000000000000000000', '3': '0', '4': '0', '5': '0', '6': '100', '7': '0', '8': false, '9': false, '10': '' } ]