这是dialogflow v2中使用的yelp-fusion node.js API的代码。
问题:agent.add(response.jsonBody.businesses[0].name);
应当使机器人说出企业的名称实际上并没有运行,即使有代码也没有。
根据研究,其他答案提到了在此JavaScript承诺中需要使用粗箭头=>的必要性。
但是,它已经被使用了。 .then()内部的代码未运行,但console.log除外,该代码会运行。
谁能建议我该怎么做才能在javascript promises中运行方法?
还是其他选择?
非常感激。谢谢!
下面的客户端是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);
});
最佳答案
您解决了一半。使用粗箭头并不是很多,它是在处理异步函数(client.search
调用),并且在将异步函数与dialogflow-fillfillment库一起使用时,需要使用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 );
});
关于javascript - JavaScript内的方法保证不会在dialogflow上运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51695158/