Node.js 将数据排序到对象中适当的键中
我正在尝试循环和排序大量数据(整个以太坊区块链lol) 我正在尝试为每个地址创建所有事务的记录 显然,这是一个非常密集的过程,我不知道如何使它比我现有的更有效(这不是那么有效) 它开始很快,但我认为现在它已经慢了,因为在Node.js 将数据排序到对象中适当的键中,node.js,rpc,blockchain,ethereum,Node.js,Rpc,Blockchain,Ethereum,我正在尝试循环和排序大量数据(整个以太坊区块链lol) 我正在尝试为每个地址创建所有事务的记录 显然,这是一个非常密集的过程,我不知道如何使它比我现有的更有效(这不是那么有效) 它开始很快,但我认为现在它已经慢了,因为在txs对象中查找地址 非常感谢任何帮助意见/帮助 var txs={}; var i=0; //在块上循环 (函数循环(){ setTimeout(函数(){ //获取当前块 var block=web3.eth.getBlock(i,true,(error,block)=>{
txs
对象中查找地址
非常感谢任何帮助意见/帮助
var txs={};
var i=0;
//在块上循环
(函数循环(){
setTimeout(函数(){
//获取当前块
var block=web3.eth.getBlock(i,true,(error,block)=>{
//调试器;
//在块中循环事务
对于(var j=0;j
我认为您的代码中有一个错误,位于“else if”,似乎您应该使用txs[block.transactions[j]
属性,而不是txs[block.transactions[j].to]
。如果您只是想实现递归模式,那么可以使用函数或方法。如果使用node.js v6+,则可以使用a而不是对象。谢谢,我在else If中错过了这一点。它无声地出错了:P我会研究一下那些东西,谢谢你,那没有多大的效率。在这个例子中,我只是使用ES6,但这不会提高性能,但应该更容易维护。
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);
})();