async.each将无法在回调函数中工作

时间:2017-03-15 04:31:56

标签: node.js

我有一个对象的对象,我们可以迭代该对象。每个对象都将处理函数顺序。第一个函数回调然后第二个函数工作。第二个函数回调来迭代下一个对象。

申请工作node.js

我们可以使用async.each,但无法正常使用。

 async.each(result,function(item,callback){
  keys1 ='id'
  keys2 ='resul'
  var key1value = item[keys1]
  var key2value = item[keys2]
  var query = '{"query":{"query_string":{"query":"' + keys1 + ':' + key1value + ' AND ' + keys2 + ':' + key2value + '"}},"sort":{"_id":{"order":"asc"}}}'
  client.search({ index: config.indexname, type: config.basetype, body:   query }).then(function (data) {
         if(err){
           callback(err);
           return;
           }else{
            if (data.hits.hits.length == 0) {
               client.index({ index: config.indexname, type:config.basetype, body: data.hits.hits }, function (err, results) {
                    console.log("Inserted data");
                    callback("inserted");
                });
             } else {
                console.log("--- Response ---");
                var rows={}
                rows=result[i];
                rows._catalogId = data.hits.hits[0]._source._catalogId;
                rows._connectionId =data.hits.hits[0]._source._connectionId;
                rows._dataImportId =data.hits.hits[0]._source._dataImportId;
                var param = { index: config.indexname, type: config.basetype, id: data.hits.hits[0]._id, body: { doc:rows, doc_as_upsert: true } };
                client.update(param, function (err, results) {
                    console.log("updated data");
                    callback("updated");
                  });
              }
          }

     });
 });

1 个答案:

答案 0 :(得分:0)

如果您阅读了async API for each,就会看到

  

注意,由于此函数并行地将iteratee应用于每个项目,因此无法保证iteratee函数将按顺序完成。

因此,对象不是按顺序处理的。