Обработка множественных возвратов по функции - PullRequest
0 голосов
/ 18 октября 2019

Я использую Twilio для отправки SMS, и недавно я получил отзыв о том, как выполнять синхронные вызовы API, чтобы предотвратить ошибку «Too Many API Calls». (async / await)

Это мой код:

const sendSMSAsyncFunc = async () => {
   while (numberStart < numbersLen) {
     try {
       let maxNumbers = Math.min(numbersLen, numberStart + recipientAmount);

        for (let i = numberStart; i < maxNumbers; i++) {
           let number = numbers[i]['phone_number'].replace(/[^\d]/g, '')

            if (number.length > 10 && number[0] === '1') {
               number = number.substring(1)
              cleanNumbers.push('1' + number)
            } else {
               cleanNumbers.push('1' + number)
            }

           if (i == maxNumbers - 1) {
              console.log("MESSAGE SENDING", i)
              var params = {
                'body': `${event_sms_message}`,
                'messagingServiceSid': 'XXXXXXX',
                'to': cleanNumbers
            }
           console.log("Pre send message")
           await sendMessage(params, messageId)

           cleanNumbers = []
           numberStart = numberStart + recipientAmount;
          }
      }
    }catch(e) {
        console.error(e);
    }
  }
};

Функция отправки сообщения

async function sendMessage(params, messageId) {
  return client.messages.create(params, function(err, data, message) {
    if (err) {
      console.log("ERROR:");
      console.log(err)
      return 'done'
    }
    else {
      console.log("SUCCESS:");
      console.log(data)
      return 'done'
    }
  })
  .then(message => 
    console.log(message.sid)
  );
}

Проблема в том, что я попытался отправить сообщение, и оно застрялов случае ошибки вместо перехода к следующему «номеру» он был в цикле ошибок.

Это заставляет меня думать, что возврат «done» для if (err) не работает. Есть ли способ выйти из функции без необходимости удаления первого возврата в функции client.messages.create() ??

...