Promise.map具有多个值

问题描述 投票:1回答:1

我有以下代码:

Promise.map(myValues, async myValue => {
  const owner = await findOwner(myValue);

  return sendMessage(owner);
})

现在我想了解如果我想每个值发送两条消息,我怎么能完成同样的事情:

Promise.map(myValues, async myValue => {
  const owner = await findOwner(myValue);
  /* I want both sendMessage and senMessageSpecific(owner) to happen but map expects just one return. How do I deal with this situation? */

  sendMessage(owner);

  sendMessageSpecific(owner);
})

如果在地图中我希​​望能够返回多个承诺(在某些情况下),那么语法是什么?现在它显然不起作用,因为我做了回报,所以它永远不会进入第二个承诺。

javascript promise bluebird
1个回答
1
投票

我假设您的两个消息函数返回promises,并且您希望map等待两者。在这种情况下,你可以将它们包装在Promise.all中。像这样:

Promise.map(myValues, async myValue => {
  const owner = await findOwner(myValue);
  return Promise.all([sendMessage(owner), sendMessageSpecific(owner)]);
})

或者,如果您不关心返回值,您可以像使用findOwner一样等待这两个函数。像这样:

Promise.map(myValues, async myValue => {
  const owner = await findOwner(myValue);
  await sendMessage(owner);
  await sendMessageSpecific(owner);
})

这两种功能都会发生。不同之处在于,在第一种情况下,它们将并行发生,在最后一种情况下,它们将一个接一个地发生。

© www.soinside.com 2019 - 2024. All rights reserved.