使用 promise 从 map 函数内部推送到外部对象
Push to external object from inside a map function with a promise
我知道这是 Whosebug 上的一个热门话题,但我 运行 在使用 promise 函数填充外部对象时遇到了问题。
基本上我想做的是:
- 通过 promise 获取我要迭代的对象数组
- 使用映射函数迭代此数组。每次迭代调用承诺
- 在第二个 promise 解决后,我想将一个 Id 和 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})
})
我知道这是 Whosebug 上的一个热门话题,但我 运行 在使用 promise 函数填充外部对象时遇到了问题。
基本上我想做的是:
- 通过 promise 获取我要迭代的对象数组
- 使用映射函数迭代此数组。每次迭代调用承诺
- 在第二个 promise 解决后,我想将一个 Id 和 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})
})