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

如何在JOVO的Intent中运行异步函数以获取正确响应?

解决Jovo Intent中异步函数调用的问题

这问题我之前也碰到过,核心就是没正确处理异步函数的执行时机~你现在的代码同步调用异步方法FindItem,但异步函数会立刻返回一个Promise,不会直接等到结果出来,所以你的this.ask(response)会在FindItem还没完成查询时就执行,这时候response还是初始的'nada'。

要搞定这个很简单,只需要调整两步:把Intent处理函数改成异步函数,用await等待异步操作完成,具体如下:

步骤1:给Intent函数加上async关键字

只有标记为async的函数内部,才能使用await来等待异步结果,所以先把Intent方法改成异步函数。

步骤2:用await调用FindItem

把同步调用改成await FindItem(...),这样代码会暂停在这里,直到FindItem的异步操作完成并返回结果,再赋值给response。

修改后的完整代码

app.setHandler({
  async Intent() { // 这里添加async关键字
    let response = 'nada';
    response = await FindItem(this.$inputs.Item.value); // 这里添加await
    this.ask(response);
  }
});

额外要确认的点

  • 确保FindItem确实是返回Promise的异步函数:比如它本身是用async定义的,或者内部通过new Promise()封装了异步逻辑(比如数据库查询、API请求)。举个FindItem的示例写法:
    async function FindItem(itemValue) {
      // 模拟异步操作,比如调用外部接口或查询数据库
      await new Promise(resolve => setTimeout(resolve, 100));
      return 'Banana'; // 实际场景中这里是异步获取到的真实结果
    }
    
  • Jovo框架完全支持异步的handler函数,只要你的Node.js环境支持ES6+的async/await(现在主流版本都没问题)。

这样修改后,Intent就会等FindItem拿到结果后再返回正确响应,不会再提前返回'nada'啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:07:08