【发布时间】: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