使用异步函数的结果填充数组

时间:2017-10-25 17:33:00

标签: javascript arrays asynchronous es6-promise

我需要设置一个对象数组,但是它的属性需要来自异步函数。

对于我这样做,我在数组上运行.map(),并对每个元素做我需要做的任何事情,但是我需要async函数的结果。

我正在做的方式现在我得到PromiseStatusPromiseValue作为我的结果,这不是我想要的。我基本上只想在我的数组中使用PromiseValue

这是我目前的代码:

function processMyArray (array) {
  const processedArray = array.map(x => {
    return myAsyncFunction(x)
      .then((result) => {
        const { attribute1, attribute2 } = result
        return {
          attribute1,
          attribute2
        }
      })
  })
  return processedArray
}

// the rough code for myAsyncFunction()
 myAsyncFunction (data) {
    return Promise.all(
      [
        this.getAttribute1(data),
        this.getAttribute2(data)
      ]
    )
    .then(([attribute1, attribute2]) => {
      return {
        attribute1, attribute2
      }
    })
  }

1 个答案:

答案 0 :(得分:1)

将映射包装到

Promise.all(array.map(...))

或使用酷ES 7的东西(等待for循环):

async function processMyArray (array) {
  const result = [];
  for(const x of array){ //x is a bad name by the way
    const { attribute1, attribute2 } = await myAsyncFunction(x);
    result.push({ attribute1, attribute2 });
  }
  return result;
}