Promise.map с несколькими значениями - PullRequest
1 голос
/ 26 марта 2019

У меня есть следующий код:

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

Каков синтаксис, если на карте я хочу иметь возможность вернуть более одного обещания (в некоторых случаях)? Теперь это, очевидно, не работает, потому что я делаю возврат, поэтому он никогда не попадает во второе обещание.

1 Ответ

1 голос
/ 26 марта 2019

Я предполагаю, что ваши две функции сообщений возвращают обещания, и вы хотите, чтобы карта ожидала обоих. В этом случае вы можете обернуть их в 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);
})

Оба варианта выполнения обеих функций. Разница в том, что в первом случае они будут происходить параллельно, а в последнем случае они будут происходить один за другим.

...