Javascript 尝试串行使用async.forEach,但失败-Node.js
例如,我正在使用图书馆。在foreach循环中,我将调用不同的服务并获取数据。在我看来,这些数据应该是为了处理它,因为这些是一些服装细节,需要整理。因此,我试图通过在外部服务回调中添加Javascript 尝试串行使用async.forEach,但失败-Node.js,javascript,node.js,asynchronous,foreach,node-async,Javascript,Node.js,Asynchronous,Foreach,Node Async,例如,我正在使用图书馆。在foreach循环中,我将调用不同的服务并获取数据。在我看来,这些数据应该是为了处理它,因为这些是一些服装细节,需要整理。因此,我试图通过在外部服务回调中添加done(),使foreach循环同步 var address_deails = []; var x = 0; async.forEach(lat_long, function (item, done) { external_servie(item,config,function (err, data)
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)
}
});
var地址_deails=[];
var x=0;
forEach(lat_long,函数(item,done){
外部服务(项目、配置、功能(错误、数据){
如果(错误){
回调(err,null);
}否则{
//代码在这里。。。。。。。
地址\u deails[x]=//一些\u数据;
}
x++;
done();您可以使用匿名函数来更正索引:
async.forEach(lat_long, function (item, done) {
(function(index) {
external_servie(item,config,function (err, data) {
if (err) {
callback(err, null);
} else {
//code here .......
address_deails[index] = //some_data;
}
done(); <------------- Here
});
})(x);
x++
}, function(err) {
console.log(err,address_deails)
});
async.forEach(lat_long,函数(item,done){
(功能(索引){
外部服务(项目、配置、功能(错误、数据){
如果(错误){
回调(err,null);
}否则{
//代码在这里。。。。。。。
address\u deails[index]=//一些\u数据;
}
done();是async的别名。每个和文档都会显示:
注意,由于此函数并行地将iteratee应用于每个项,因此不能保证iteratee函数将按顺序完成
您要查找的是async.eachSeries()
/async.forEachSeries()
:
async
是否有forEach
?您使用的是什么版本的async?我认为当前的版本没有forEach?async。每个版本都不能保证该系列将按顺序运行。@Seonixx我的版本是1.4。2@Jai是的,我正在使用1.4.2。有没有其他库可以用来实现这一点?@KanishkaPanamaldeniya我对此表示怀疑。
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)
}
});
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
});