Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用承诺从映射函数内部推送到外部对象_Javascript_Promise_Bluebird - Fatal编程技术网

Javascript 使用承诺从映射函数内部推送到外部对象

Javascript 使用承诺从映射函数内部推送到外部对象,javascript,promise,bluebird,Javascript,Promise,Bluebird,我知道这是有关stackoverflow的热门话题,但我在使用promise函数填充外部对象时遇到了一个问题 所以基本上我想做的是: 通过一个promise获得我想要迭代的对象数组 使用map函数迭代此数组。在每次迭代中调用承诺 在第二个承诺解决后,我想将一个Id和承诺的结果推送到一个数组中 当然,我不能使用全局对象,因为承诺不在正确的范围内。我还尝试了Bluebird Promise.map函数,但这样我就无法将对象推到比第二个Promise结果更高的位置 这是到目前为止我的代码。Prom

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

所以基本上我想做的是:

  • 通过一个promise获得我想要迭代的对象数组
  • 使用map函数迭代此数组。在每次迭代中调用承诺
  • 在第二个承诺解决后,我想将一个Id和承诺的结果推送到一个数组中
当然,我不能使用全局对象,因为承诺不在正确的范围内。我还尝试了Bluebird Promise.map函数,但这样我就无法将对象推到比第二个Promise结果更高的位置

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

通过一个promise获得我想要迭代的对象数组

使用map函数迭代此数组。在每次迭代中调用承诺

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


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

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

是的,太好了,谢谢你。诀窍在于.orders=>[actie.\u id,orders],它返回了一个对象。我甚至可以用Promise.map:
actie.groupActies().then(acties=>Promise.map(acties,actie=>order.getActieArtikelenOmzet(actie.artikelen)。然后(orders=>[actie.\u id,orders])。然后(results=>{res json({消息:“Omzet voor aktie”,akties:results})
@patrick steenks这也是一个很好的解决方案。Ypu可以作为未来读者的答案…(实际上我的解决方案返回的是2d数组,而不是对象数组;)谢谢。现在正在返回对象数组:)
actie.groupActies()
.then( acties => Promise.all(
  acties.map(actie => 
    order.getActieArtikelenOmzet(actie.artikelen)
    .then(orders => [actie._id,orders])
  )
 ))
.then(results=> res.json({results}))
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})
})