Я использую 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()
??