这是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()可以正常工作。
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);
});
发布于 2018-08-06 08:11:17
你有一半的解决方案。使用胖箭头并不重要,因为您正在处理异步函数( client.search
调用),并且当您在dialogflow实现库中使用异步函数时,您需要使用Promises。
具体地说,您需要返回一个Promise,以便调用函数知道它必须等待所有then()
子句完成才能发送回复。
您不会显示整个函数,但是可以通过添加一些return
语句来实现。可能是这样的:
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 );
});
https://stackoverflow.com/questions/51695158
复制相似问题