javascript — откладывать асинхронный вызов службы, пока не будет решено обещание

Отложить асинхронный вызов службы, пока не будет выполнено обещание

Ваш второй пример уже почти Promise.all , но Promise.all работает с массивом обещаний. twilioNumbers {amp}amp;{amp}amp;... создает массив обещаний, поэтому у вас есть массив обещаний внутри другого массива, который не будет работать.

Таким образом, вы можете использовать оператор распространения:

 await Promise.all([ // do other stuff ...(twilioNumbers ? twilioNumbers.map(phoneNumber ={amp}gt; getTwilioText(mailTokens, phoneNumber)) : [] ), ]); ... function getTwilioText(mailTokens, phoneNumber) { let payload = { body: `[Incoming Order!]`, from: 'my number', to: phoneNumber, }; return TwilioClient.messages.create(payload); } 

На данный момент, это немного многословно, так что вы можете выделить эту часть:

 await Promise.all([ // do other stuff getTwilioTexts(twilioNumbers, mailTokens), ]); ... // returns a promise for an array async function getTwilioTexts(numbers, mailTokens) { return numbers ? Promise.all(numbers.map(num ={amp}gt; getTwilioText(mailTokens, num))) : []; } function getTwilioText(mailTokens, phoneNumber) { let payload = { body: `[Incoming Order!]`, from: 'my number', to: phoneNumber, }; return TwilioClient.messages.create(payload); } 
Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector