Javascript 异步迭代数组,然后返回数组?

Javascript 异步迭代数组,然后返回数组?,javascript,arrays,node.js,Javascript,Arrays,Node.js,我尝试异步遍历数组,然后希望将值从被调用函数推送到新数组 我有以下代码,但不知道如何处理这个 let companies = []; _.forEach(notProcessed, function(company) { companies.push(processThem(company)); }); return companies; 当然,当打印/返回公司时,我将收到一个空数组 提前感谢,感谢您的帮助 一种方法: var notProcessed = ['a', 'b', 'c'

我尝试异步遍历数组,然后希望将值从被调用函数推送到新数组

我有以下代码,但不知道如何处理这个

let companies = [];
_.forEach(notProcessed, function(company) {
    companies.push(processThem(company));
});
return companies;
当然,当打印/返回公司时,我将收到一个空数组

提前感谢,感谢您的帮助

一种方法:

var notProcessed = ['a', 'b', 'c'];

function processThem(company) {
  // Example long process
  return new Promise((resolve) => {
    setTimeout(() => resolve(company), 500);
  });
}

function processArrayAsync(notProcessed) {
  var companies = [];
  var promise = Promise.resolve();
  for(let next of notProcessed) {
    promise = promise
      .then(() => processThem(next))
      .then(company => companies.push(company));
  }

  return promise.then(() => companies);
}

processArrayAsync(notProcessed).then(console.log);
还有一种更好的方法使用es6中的新函数
async

var notProcessed = ['a', 'b', 'c'];

async function processThem(company) {
  // Example long process
  return new Promise((resolve) => {
    setTimeout(() => resolve(company), 500);
  });
}

async function processArrayAsync(notProcessed) {
  var companies = [];
  for(let next of notProcessed) {
    let res = await processThem(next);
    companies.push(res);
  }
  return companies;
}

processArrayAsync(notProcessed).then(console.log);

我非常喜欢处理异步操作的第二种方法:)

如果
processThem()
中包含异步代码,则需要创建promise数组,但也需要
processThem()
返回一个promise,以便将其promise推送到数组中。然后在promises数组上使用
Promise.all()
显示
processThem()
的示例代码我将收到一个空数组
-不,您应该得到一个与
notProcessed
数组一样长的数组,只是数组中的值可能都是
未定义的
,或者无论什么
processThem
returnsasuming
processThem()
中包含异步代码,我们都需要看到实际的函数为您提供最好的帮助,因为这是您需要做一些不同事情的第一步。请向我们展示代码,以便我们提供帮助。