这是在dialogflow v2中使用的yelp-fusion node.js API的代码。
问题:
agent.add(response.jsonBody.businesses[0].name);
应该使机器人说出公司的名称实际上并没有运行,即使有代码。
从研究中,其他答案提到了在此JavaScript承诺中需要使用粗箭头=>的情况。
但是,它已经被使用了。 .then()内部的代码没有运行,但console.log除外,它确实在运行。
有人能建议我在JavaScript Promise中如何运行方法吗? 还是其他选择? 非常感激。谢谢!
下面的客户端是yelp API客户端。
代理是dialogflow中的一个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);
});
答案 0 :(得分:1)
您解决了一半。使用粗箭头并不是很多,它是在处理异步函数(client.search
调用),并且在将异步函数与dialogflow-fillfillment库一起使用时,您需要使用承诺。
具体来说-您需要返回一个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 );
});