我正在尝试循环播放排序大量数据(整个以太坊区块链lol)
我正在尝试为每个地址创建所有交易的记录。
显然这是一个非常密集的过程,我不知道如何使它超出我的效率(效率不高)
它开始很快但我现在认为它已经因为查找txs
对象中的地址而变慢了。
非常感谢任何帮助意见/帮助。
https://giphy.com/gifs/3o6fJ7KWqxESY9okk8
var txs = {};
var i = 0;
// Loop over blocks
(function loop () {
setTimeout(function () {
// Get current block
var block = web3.eth.getBlock(i, true, (error, block) => {
// debugger;
// Loop over transactions in block
for(var j = 0; j < block.transactions.length; j++) {
// debugger;
if(txs[block.transactions[j].to]) {
txs[block.transactions[j].to].transactions.push(block.transactions[j]);
} else if (txs[block.transactions[j].to]) {
txs[block.transactions[j].from].transactions.push(block.transactions[j]);
} else {
txs[block.transactions[j].to] = {
transactions: [block.transactions[j]]
}
txs[block.transactions[j].from] = {
transactions: [block.transactions[j]]
}
}
}
});
i++
if (i < highestBlock) {
loop();
}
}, 50);
})();
答案 0 :(得分:1)
我认为您的代码在“else-if”中有错误,您似乎应该使用txs[block.transactions[j].from]
属性而不是txs[block.transactions[j].to]
。如果您只想完成递归模式,可以使用setImmediate
函数或process.nextTick
方法。如果您使用node.js v6 +,则可以使用Map
而不是对象。