从具有promise的map函数内推送到外部对象

时间:2017-09-01 12:10:27

标签: javascript promise bluebird

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

所以基本上我想做的事情:

  • 通过一个承诺得到一个我想迭代的对象数组
  • 使用map函数迭代此数组。每次迭代调用一个承诺
  • 在第二个承诺解决后,我想将一个Id和承诺的结果推送到一个数组

当然,我不能使用全局对象,因为承诺不会在正确的范围内。我也尝试过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 })
})

2 个答案:

答案 0 :(得分:1)

  

通过promise获取我想迭代的对象数组

actie.groupActies()
  

使用map函数迭代此数组。每次迭代调用一个承诺

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

在第二个承诺解决之后,我想将Id和promise的结果推送到数组

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

这里的主要想法是使用Promise.all,这样只有在所有订单完成后它才会继续。

答案 1 :(得分:0)

使用Promise.map来阐述Jonas w的答案,以下内容也是如此:

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})
})