как получить возвращаемое значение обратного вызова в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(...);
Другие вопросы по тегам