首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >javascript内部的方法保证不会在对话流上运行

javascript内部的方法保证不会在对话流上运行
EN

Stack Overflow用户
提问于 2018-08-05 22:21:50
回答 1查看 530关注 0票数 2

这是dialogflow v2中使用的yelp-fusion node.js API的代码。

问题: agent.add(response.jsonBody.businesses[0].name);,它应该让机器人说出业务的名称,即使代码在那里,它也不会实际运行。

根据研究,其他答案提到了在这个javascript承诺中使用胖箭头=>的必要性。

然而,它已经被使用了。除了运行console.log之外,.then()中的代码没有运行。

有没有人能建议我如何在javascript promises中运行方法?或其他替代方案?非常感谢。谢谢!

下面的客户端是yelp API客户端。

代理是对话流中的webhookclient。当在下面的代码之外执行时,agent.add()可以正常工作。

代码语言:javascript
复制
    client.search({
      term:'Four Barrel Coffee',
      location: 'san francisco, ca'
    }).then(response => {
      //res = response.jsonBody.businesses[0].name; //*not assigned!
      console.log(response.jsonBody.businesses[0].name); 
      agent.add(response.jsonBody.businesses[0].name); //*nothing!
    }).catch(e => {
      console.log(e);
    });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-06 08:11:17

你有一半的解决方案。使用胖箭头并不重要,因为您正在处理异步函数( client.search调用),并且当您在dialogflow实现库中使用异步函数时,您需要使用Promises。

具体地说,您需要返回一个Promise,以便调用函数知道它必须等待所有then()子句完成才能发送回复。

您不会显示整个函数,但是可以通过添加一些return语句来实现。可能是这样的:

代码语言:javascript
复制
return client.search({
  term:'Four Barrel Coffee',
  location: 'san francisco, ca'
}).then(response => {
  return agent.add(response.jsonBody.businesses[0].name);
}).catch(e => {
  console.log(e);
  return Promise.reject( e );
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51695158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档