You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NestJS中获取Vonage短信服务的回调返回值

解决Vonage短信API回调异步导致的返回值滞后问题

问题核心在于vonage.message.sendSms是回调风格的异步函数,await仅对Promise生效,对你当前的回调写法不起作用。所以代码里console.log(result)和return result会在回调逻辑执行前就执行,导致输出时result.error还没被赋值。

解决方法1:将回调封装为Promise

把sendSms的回调逻辑包装成Promise,让await能正确等待异步操作完成:

// 封装回调为Promise
function sendSmsPromise(from, to, text) {
  return new Promise((resolve, reject) => {
    vonage.message.sendSms(from, to, text, (err, responseData) => {
      if (err) {
        console.log('1');
        reject(err);
      } else {
        if (responseData.messages[0]['status'] === '0') {
          console.log('2');
          resolve({ success: true });
        } else {
          console.log('3');
          const errorMsg = `Message failed with error: ${responseData.messages[0]['error-text']}`;
          reject(new Error(errorMsg));
        }
      }
    });
  });
}

// 使用async/await调用
async function sendSmsAndCheckResult(from, to, text) {
  const result = {};
  try {
    await sendSmsPromise(from, to, text);
    result.success = true;
  } catch (err) {
    result.error = err.message;
  }
  console.log(result);
  return result;
}

解决方法2:直接使用Promise版本的API(如果SDK支持)

新版Vonage SDK通常支持Promise风格调用,直接去掉回调参数,用await接收返回值即可:

async function sendSmsAndCheckResult(from, to, text) {
  const result = {};
  try {
    const responseData = await vonage.message.sendSms(from, to, text);
    if (responseData.messages[0]['status'] === '0') {
      console.log('2');
      result.success = true;
    } else {
      console.log('3');
      result.error = `Message failed with error: ${responseData.messages[0]['error-text']}`;
    }
  } catch (err) {
    console.log('1');
    result.error = err.message;
  }
  console.log(result);
  return result;
}

这样修改后,代码会等待短信发送的异步逻辑完成,再执行console.log(result),就能正确获取到回调里赋值的错误信息。

内容的提问来源于stack exchange,提问作者user10874312

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:24:45