gpt4 book ai didi

javascript - 如何在 for 循环中正确执行异步方法?

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:23 26 4
gpt4 key购买 nike

我正在尝试在 for 循环构造中执行异步方法,然后显示结果。我认为问题在于 for 循环在 cryto.randomBytes 方法调用回调之前递增。我将如何正确执行这个 for 循环?

var crypto = require('crypto');
var nimble = require('nimble');

var codes = [];

nimble.series([
function(callback){

for(var i = 0; i < 100;i++){

crypto.randomBytes(64, function(ex, buf) {
if (ex) throw ex;
codes[i] = buf.toString('hex');
});

}

callback();

},
function(callback){

for(var i = 0; i < codes.length;i++){
console.log("Ticket " + i + ":" + codes[i]);
}

callback();

}]);

最佳答案

是的,你是对的,循环在调用回调之前完成。您可以使用匿名函数创建一个范围,其中每次迭代都会获取自己的变量副本。

此外,您可以在最后一个值添加到结果之后调用回调,而不是在循环之后:

function(callback){

var cnt = 0;
for(var i = 0; i < 100;i++){
(function(i){
crypto.randomBytes(64, function(ex, buf) {
if (ex) throw ex;
codes[i] = buf.toString('hex');
if (++cnt == 100) {
callback();
}
});
})(i);
}

}

关于javascript - 如何在 for 循环中正确执行异步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24580146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com