javascript 中的方法承诺不会在 dialogflow 上 运行

Methods inside javascript promises not running on dialogflow

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

问题: agent.add(response.jsonBody.businesses[0].name); 这应该让机器人说出企业名称实际上 运行 即使代码在那里。

根据研究,其他答案提到需要在此 javascript 承诺中使用粗箭头 =>。

但是,它已经被使用了。 .then() 中的代码不是 运行ning,除了 console.log,它执行 运行.

任何人都可以建议我可以对 javascript 承诺中的 运行 方法做什么吗? 或者其他选择? 非常感激。谢谢!

下面的客户端是yelpAPI客户端。

agent 是 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-fulfillment 库一起使用时,你需要使用承诺。

具体来说——您需要 return 一个 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 );
});