【问题标题】:MongoDb forEach asynchronous callbackMongoDb forEach 异步回调
【发布时间】:2016-11-27 18:57:45
【问题描述】:

我正在使用 Request npm 模块从 api 中提取数据并将其插入到我的 Mongo 数据库中的字段中。阿富汗,数据库中的第一个国家,是唯一一个被数据填充的文件。每个其他国家都被跳过。 以下代码控制台顺序记录“开始”和“结束”,然后记录国家名称。我知道这是 javascript 的异步特性的结果,但我不确定它如何影响这段代码。 控制台日志不应该:

begin
country
end
etc...

代码如下:

MongoClient.connect(url, function(err, db)  {
  db.collection('countries').find().forEach( function(myDoc) {
    console.log('beginning');
    var code = myDoc.country.iso2;
    var options = {
      url: 'https://api.tugroup.com/v1/travelsafe/countries/' + code,
      headers: {
        ['X-Auth-API-Key']: '*******',
        ['Content-Type']: 'application/x-www-form-urlencoded'
      }
    }
    var callback = function(error, response, body)  {
      console.log(myDoc.country.name);
      if (!error && response.statusCode == 200) {
        var info = JSON.parse(body);
        db.collection('countries').updateOne(
            { 'country.name' : myDoc.country.name },
            { $set: {
            'safety.hasAdvisoryWarning' : info.hasAdvisoryWarning,
            'safety.hasRegionalAdvisory' : info.hasRegionalAdvisory,
            'safety.advisories' : info.advisories,
            'safety.advisoryState' : info.advisoryState,
            'safety.advisoryText' : info.advisoryText,
            'safety.lawAndCulture' : info.lawAndCulture,
            'safety.security' : info.safety}
        },
        function(err, result)  {
          console.log(err);
          db.close();
        });
      }
    }
    request(options, callback);
    console.log('end');
  });
});

控制台日志:

begin
end
begin 
end
etc...
Algeria
American Samoa
Andorra
etc...

【问题讨论】:

    标签: javascript node.js mongodb asynchronous


    【解决方案1】:

    只有第一个更新的问题是因为您在updateOne的回调中关闭了数据库连接(db.close),因此在第一次更新完成后您与mongoDB的以下连接被关闭。

    如果你的日志输出应该是这样的

    beginning  
    $country  
    end  
    

    那么您必须将日志记录移动到您的请求的回调中或按顺序发出您的请求。

    【讨论】:

      猜你喜欢
      • 2018-06-14
      • 2013-05-02
      • 2013-09-29
      • 2021-11-13
      • 1970-01-01
      相关资源
      最近更新 更多