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

在Microsoft Bot Builder(Node.js环境)中运行异步函数

解决机器人无法返回异步API结果的问题

嘿,我来帮你搞定这个问题!你遇到的核心问题是:第三方API请求是异步操作,它返回的是一个Promise对象,而你的机器人处理函数不是异步的,没法用await等待结果,直接返回的话就会出现[object Promise]这种情况。这里有两种简单的解决方法,你可以根据自己的情况选:

方法一:把机器人的处理函数改成异步函数

大多数现代机器人框架都支持异步回调函数,你只需要在处理请求的函数前面加上async关键字,然后用await等待API返回结果就行。举个例子:

// 假设你的机器人是这样监听对话请求的
bot.on('conversationRequest', async (request) => {
  try {
    // 等待第三方API返回结果
    const apiResponse = await fetchThirdPartyAPI();
    // 从返回的JSON对象里取出你要的无意义字符串
    const meaninglessString = apiResponse.yourTargetKey; // 替换成实际的字段名
    // 返回给用户
    bot.sendResponse(request, meaninglessString);
  } catch (error) {
    // 别忘了处理API请求失败的情况,比如给用户返回提示
    bot.sendResponse(request, '抱歉,暂时无法获取数据');
    console.error('API请求出错:', error);
  }
});

方法二:用Promise的.then()链式调用处理

如果因为某些限制没法把处理函数改成异步的,那可以用Promise的.then()方法来处理异步结果,不用await也能拿到数据:

bot.on('conversationRequest', (request) => {
  fetchThirdPartyAPI()
    .then(apiResponse => {
      // 取出目标字符串
      const meaninglessString = apiResponse.yourTargetKey; // 替换成实际的字段名
      bot.sendResponse(request, meaninglessString);
    })
    .catch(error => {
      bot.sendResponse(request, '抱歉,暂时无法获取数据');
      console.error('API请求出错:', error);
    });
});

注意点

记得把apiResponse.yourTargetKey替换成你实际要从JSON对象中提取的字段路径,比如如果API返回的是{"randomText": "xyz789"},那就是apiResponse.randomText。

另外,你提到API请求已经单独测试正常,那只要确保在机器人代码里调用的是同一个正确的请求函数就行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:30:07