这是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/

10-12 12:25
查看更多