#javascript #promise #bluebird
#javascript #обещание #bluebird
Вопрос:
У меня есть следующий код:
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. Я думаю, вам следует вернуть одно обещание, которое содержит 2 обещания?
2. Почему понижающий голос?
3. Я не уверен насчет голосования против, но ваш вопрос не очень ясен. Поскольку никакой код после возврата не будет доступен, намерение также неясно…
4. отредактировано для большей наглядности.
Ответ №1:
Я предполагаю, что ваши две функции сообщений возвращают обещания, и вы хотите, чтобы 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);
})
В обоих случаях будут выполняться обе функции. Разница в том, что в первом случае они будут происходить параллельно, тогда как в последнем случае они будут происходить одно за другим.