我知道这是stackoverflow上的一个热门话题,但是我在使用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 })
})
答案 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})
})