Loopback:如何在包含异步方法的for循环中收集数据?

问题描述 投票:1回答:2

使用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似乎是异步的,这样做的首选方法是什么?

node.js loopbackjs
2个回答
1
投票

使用async库。您可以轻松地使用async.eachSearies()async函数串联循环并获得所需的输出。你可以在这里参考link


1
投票

您可以在forEach中创建新的承诺,例如:

let Y = X.forEach((item) => {
  return new Promise((resolve, reject) => {
    resolve('done')
  })
})

Promise.all(y, callback)
© www.soinside.com 2019 - 2024. All rights reserved.