【发布时间】:2018-03-22 10:46:28
【问题描述】:
async.each(
driver,
function(apiRequest, cb) {
apicall(apiRequest, cb);
},
function(err) {
console.log("error...");
}
);
function apicall(item, cb) {
request(
'https://api.mlab.com/api/1/databases/db/collections/doc?q={"driverid": "' + item + '"}&apiKey=....',
function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log("----->" + body);
var o = JSON.parse(body);
for (var i = 0; i < o.length; i++) {
name[a] = o[i].first_name.concat(" ").concat(o[i].last_name);
modelname[a] = o[i].vehicleused.modelname;
modeltype[a] = o[i].vehicleused.modeltype;
ridescompleted[a] = o[i].ratings.ridescompleted;
avgrating[a] = o[i].ratings.avgrating;
ridescancelled[a] = o[i].ratings.ridescancelled;
behaviour[a] = o[i].ratings.behaviour;
timelypickupdrop[a] = o[i].ratings.timelypickupdrop;
conditionofvehicle[a] = o[i].ratings.conditionofvehicle;
console.log("DRIVER DETAILS---------------------------");
a++;
}
} else
console.log("error....");
}
);
}
现在,一旦我收集了所有 9 个数组中的数据,我需要对其进行处理。但只有当所有 9 个数组都填满了有关驱动程序的数据时,才能做到这一点。
但我不确定从哪里调用 process_arrays function(),它仅在 async.each 完成后处理所有数组。
【问题讨论】:
-
您为您的
apicall()函数定义了一个名为cb的回调,但您从未真正调用它。因此,apicall()在完成或出现错误时不会通知任何人。那永远行不通。当异步操作完成或出现错误时,您必须调用回调。 -
现代的方法是使用
request-promise库而不是request,然后使用 Promise 来监视异步操作的完成,而不是async库。 -
谢谢@jfriend00
标签: node.js mongodb asynchronous mlab node-async