if(err){
console.log(error + '(' + number + ').', err);
done++;
}else{
console.log(done + '(' + number + ').', result,);
done++;
}
}
function iter(){
start_time = new Date().getTime();
for(let i = 0; i < count; i++){
contract.methods.allPairs(i).call((err, result) => {
processed(result, err, i);
});
}
}
console.log('start!!!')
for(let i = 0;i < 1000;i++){
iter();
setTimeout(() => {console.log('NEXT ITERATION ', i)}, 1000);
}
сначала выводит все NEXT ITERATION 0...1000, а потом уже все done(0...100)?
contract.methods.allPairs асинхронная, да? В таком случае, iter возвращает не дожидаясь выполнения асинхронной операции и основной цикл вызывает setTimeout -- в результате все коллбэки setTimeout выполняются ~одновременно, а потом уже приходят результаты вызова iter
А разве в таком случае не было бы что то типо NEXT ITERATION 1 NEXT ITERATION 2 done 1 Done 2 NEXT ITERATION 3 Done 3 NEXT ITERATION 4 Done 1 Done 2
Обсуждают сегодня