как получить возвращаемое значение обратного вызова вnesjs
я собираюсь использоватьvonage
для текстового сервиса.
Однако толькоnode.js
синтаксис существует, и используется соответствующий API.
Есть такое явление, что коллбэк выполняется позже при попытке получить возвращаемые из колбэка значения для проверки на наличие ошибки.
Как я могу решить эту часть? Код ниже.
await vonage.message.sendSms(from, to, text, async (err, responseData) => {
if (err) {
console.log('1');
result.message = err;
} else {
if (responseData.messages[0]['status'] === '0') {
console.log('2');
} else {
console.log('3');
result.error = `Message failed with error: ${responseData.messages[0]['error-text']}`;
}
}
});
console.log(result);
return result;
Когда ошибка возникает в результате выполнения вышеуказанного кода,
result{error:undefined}
3
Выходы в порядке.
1 ответ
Насколько я понимаю, проблема в том, что вы передаете асинхронный обратный вызов. вы могли бы просто датьvonage.message.sendSms()
синхронный обратный вызов вроде так.
const result = {};
vonage.message.sendSms(from, to, text, (err, responseData) => {
if (err) {
console.log('1');
result.message = err;
} else {
if (responseData.messages[0]['status'] === '0') {
console.log('2');
} else {
console.log('3');
result.error = `Message failed with error: ${responseData.messages[0]['error-text']}`;
}
}
});
если вы хотите использовать асинхронность или обещания, я бы предложил что-то вроде этого
const sendSMS = (from, to, text) => new Promise( (resolve, reject) => {
vonage.message.sendSms(from, to, text, (err, responseData) => {
if (err) {
reject(err);
} else {
resolve(responseData);
}
});
});
// elsewhere
sendSMS(from, to, text)
.then(...)
.catch(...);