使用loopback我有一个简单的for循环,我在其中执行findOne:
let my_data = [];
Orders.forEach(function(order,idx) {
let postalcode = order.toJSON().customer.postal_code;
let ps4 = postalcode.slice(0,4);
app.models.postalcode.findOne({where: {postal_code: parseInt(ps4)},include: ['depot']}, function (err, Postalcode) {
if (err) {
winston.error('Could not load postalcode %s due to error %s: ', ps4, err.message);
} else {
if (Postalcode) {
let depot = Postalcode.toJSON().depot;
if (!depot) {
//
} else {
let depot_city = depot.city;
if (cities_to_process.indexOf(depot_city) > -1) {
my_data.push(order);
} else {
}
}
} else {
winston.warn('Could not find postal code %s', ps4)
}
}
});
});
console.log(my_data);
在for循环之后,我想对my_data中收集的数据做一些事情。由于findOne似乎是异步的,这样做的首选方法是什么?
使用async
库。您可以轻松地使用async.eachSearies()
将async
函数串联循环并获得所需的输出。你可以在这里参考link
您可以在forEach中创建新的承诺,例如:
let Y = X.forEach((item) => {
return new Promise((resolve, reject) => {
resolve('done')
})
})
Promise.all(y, callback)