使用 promise 从 map 函数内部推送到外部对象

Push to external object from inside a map function with a promise

我知道这是 Whosebug 上的一个热门话题,但我 运行 在使用 promise 函数填充外部对象时遇到了问题。

基本上我想做的是:

当然我不能使用全局对象,因为 promise 不会在正确的范围内。我也尝试过使用 Bluebird Promise.map 函数,但是这样我就无法推送到对象,而不仅仅是第二个 promise 结果。

到目前为止,这是我的代码。 PromiseTwo 应该填充一个对象,我想在 res.json 函数中显示它(这是一个 Express/NodeJS 应用程序)

let promise = actie.groupActies()
let akties = {}
promise.then(function(aktieMaanden) {
    let values = aktieMaanden.forEach((aktie) => {
        let aktieId = aktie['_id']
        let artikelen = aktie['artikelen']
        let promiseTwo = order.getActieArtikelenOmzet(artikelen)
        promiseTwo.then(function(orders) {
            akties[aktieId] = orders
            return akties
        })
    })
    return akties
}).then((akties) => {
    res.json({ message: "Omzet voor aktie", akties: akties })
})

Through a promise get an array of objects I want to iterate over

actie.groupActies()

Iterate over this array with a map function. Call a promise with each iteration

.then( acties => Promise.all(
  acties.map(actie => 
    order.getActieArtikelenOmzet(actie.artikelen)
    .then(orders => [actie._id,orders])
  )
 ))

After this second promise resolves I want to push an Id and the result of the promise to an array

.then(results=> res.json({results}))

此处的主要思想是使用 Promise.all,这样只有在 所有 个订单都已完成时它才会继续。

详细说明 Jonas w 的答案,使用 Promise.map 以下作品也适用:

actie.groupActies()
.then(acties =>
    Promise.map(acties, actie =>
       order.getActieArtikelenOmzet(actie.artikelen)
       .then(orders => [actie._id,orders])
    )
)
.then(results => {
   res.json({ message: "Omzet voor aktie", akties: results})
})