Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试串行使用async.forEach,但失败-Node.js_Javascript_Node.js_Asynchronous_Foreach_Node Async - Fatal编程技术网

Javascript 尝试串行使用async.forEach,但失败-Node.js

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)

例如,我正在使用图书馆。在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)
    }
});
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 
});