我有一个数组,它有另一个包含我需要的数据的数组。
例如,我如何在 javascript 中访问“0x88def628c16651eb0d86be5ead3d738d0cb27fe947bb786c23105ac5d67a1bd0”?这是通过调用 var transakcije 来显示的。
我试过:
transakcije[0][0] 但这不是子数组的名称,
交易 [0],
for 循环(交易即交易)无济于事。
我搜索了熟悉的答案,但没有找到对我有用的答案。我感谢我收到的任何帮助。下面是显示在 console.log() 中的 var transakcije。
function getBlockchainTransactions(blockNumber){
var tx = [];
return new Promise(resolve => {
for(var i=0; i<blockNumber; i++){
web3.eth.getBlock(i, function(error, block){
if(!error && block.transactions.length != 0){
console.log(block.transactions);
tx.push(block.transactions);
}
})
}
resolve(tx);
});
}
async function msg() {
const transakcije = await getBlockchainTransactions(blockNumber);
console.log(transakcije);
}
getBlock
是异步的,因此您正在解析一个空数组,因为for
javascript 中的循环是同步的,但是您在其中使用了异步回调,并且在is之前被resolve
调用。 tx.push
我建议您采用递归异步方法,如下所示:
function getBlockchainTransactions(blockNumber){
var tx = [];
return new Promise(resolve => {
// declare a recrusive async loop.
var recursiveAsyncLoop = function(current, max) {
// If the current index is exactly blockNumber, resolve.
if (current === max) {
resolve(tx);
}
// Otherwise, excute the operation on the actual block.
else {
var i = current;
web3.eth.getBlock(i, function(error, block){
if(!error && block.transactions.length != 0){
console.log(block.transactions);
tx.push(block.transactions);
// once the operation is finished, increase the counter on the next call.
recursiveAsyncLoop(current + 1, max);
}
// In cany case, regardless the above is true or false, continue.
else recursiveAsyncLoop(current + 1, max);
})
}
}
// Begin the loop, from index 0 until blockNumber (excluded).
recursiveAsyncLoop(0, blockNumber);
});
}
async function msg() {
const transakcije = await getBlockchainTransactions(blockNumber);
console.log(transakcije);
}
resolve
仅当项目有效地添加到数组时才应调用上述代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句