JavaScript内的方法保证不会在dialogflow上运行

时间:2018-08-05 14:21:50

标签: javascript node.js dialogflow yelp yelp-fusion-api

这是在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);
    });

1 个答案:

答案 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 );
});