gpt4 book ai didi

javascript - 尝试连续使用 async.forEach 但失败 - Node.js

转载 作者:行者123 更新时间:2023-11-30 12:05:08 24 4
gpt4 key购买 nike

forEach,我正在使用 async图书馆 。在 foreach 循环中,我将调用不同的服务并获取数据。这些数据在我看来应该是为了处理它,因为这些是一些着装细节,需要按顺序处理。所以我尝试通过在外部服务回调中添加 done() 来使 foreach 循环同步。

var address_deails = [];
var x = 0;

async.forEach(lat_long, function (item, done) {
external_servie(item,config,function (err, data) {
if (err) {
callback(err, null);
} else {
//code here .......
address_deails[x] = //some_data;
}
x++;
done(); <------------- Here
});
}, function(err) {
if(err) {
callback(err,null)
} else {
callback(err,address_deails)
}
});

但我每次都以不同的顺序获取值。

我想按 0,1,2 的顺序获取数组键。

据我所知,我认为如果您在回调中使用 done(),直到回调返回,forEach 循环将等待。

async.forEach 的工作方式是否不同?

你能给我任何建议,以便我可以解决我的问题,可能会使用异步以外的其他库。

提前致谢。

最佳答案

async.forEach()async.each 的别名,文档说:

Note, that since this function applies iteratee to each item in parallel, there is no guarantee that the iteratee functions will complete in order.

你要找的是async.eachSeries()/async.forEachSeries():

async.eachSeries(lat_long, function (item, done) {
external_servie(item,config,function (err, data) {
if (err) {
callback(err, null);
} else {
//code here .......
address_deails[x] = //some_data;
}
x++;
done(); <------------- Here
});
}, function(err) {
if(err) {
callback(err,null)
} else {
callback(err,address_deails)
}
});

现在您可以推送到 address_deails 而不是维护索引:address_deails.push(/* some data */);

您的 external_service 的错误管理也存在问题:

external_servie(item,config,function (err, data) {
if (err) {
done(err); // <<< call done with the error to stop the loop or it will continue
} else {
//code here .......
address_deails.push(/* some data */);
}
done(); <------------- Here
});

关于javascript - 尝试连续使用 async.forEach 但失败 - Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35455201/

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