如何将 .map() 与 promise 结合起来?

WoJ*_*WoJ -2 javascript promise es6-promise map-function

我有一个数组,对于这个数组的每个元素,我需要fetch一些数据(取决于元素)并将这些数据添加到数组中的元素中。

举个例子,我将fetch用一个 Promise来模拟(在现实生活中,这将是一个网络服务的答案):

let p = new Promise((resolve, reject) => resolve('x'))
let a = ['a', 'b']
a = a.map(x => p.then(y => x + y))
console.log(a)
Run Code Online (Sandbox Code Playgroud)

我期望的是第一个元素 ( a)p被调用,并在解析后将结果添加到a(giving ax)。对于b.

最终我期待一个新的数组['ax', 'bx']

我得到的是一系列 Promises

作为 Promises 的新手(我发现理论上这很棒)我很难理解这里出了什么问题。是否可以在其中组合.map()异步操作?

Ber*_*rgi 5

我期待一个新的数组['ax', 'bx'],但我得到的是一个 Promises 数组

这正是 Promise.all为此而生的。当然,它不会产生一个普通的数组,而是一个对它的承诺,但是当你做任何异步操作时,你无法避免这种情况。

const promises = a.map(x => p.then(y => x + y))
Promise.all(promises).then(console.log, console.error)
Run Code Online (Sandbox Code Playgroud)

  • 你为什么要在这么一个微不足道的例子中关心这些事情呢? (3认同)