javascript - 从网络请求中回答

标签 javascript node.js dialogflow-es

我有以下代码

function search(agent){
  var term = agent.parameters.searchphrase;

  ddg.query( term, function( err, data ){
    var answer = data.AbstractText;
    var imageUrl = data.Image;
    var source = data.AbstractSource;
    var moreUrl = data.AbstractURL;
    var heading = data.Heading;
    console.log( answer );
    agent.add( 'anything' );
    console.log( 'smh' );
    agent.add( answer );
    agent.add( new Card( {
        title: heading,
        imageUrl: imageUrl,
        text: answer,
        buttonText: 'More about this',
        buttonUrl: moreUrl
      } )
    );
    agent.add( 'Answer provided by DuckDuckGo and ' + source );
  } );
}

当我尝试从回调中调用 agent.add 时,它不会起作用,尽管其中的其他一切都有效。

当我从外部调用它时,它工作正常。

我该如何解决这个问题?

最佳答案

对于执行异步操作(例如获取回调的网络调用)的意图处理程序,您必须返回一个 Promise 对象以指示您需要等待 Promise 完成才能返回结果。

不清楚您的 ddg 对象是否可以返回 Promise,但是您可以使用类似的东西将 Promise 包装在回调中

function search(agent){
  var term = agent.parameters.searchphrase;

  return new Promise( function( resolve, reject ){
    ddg.query( term, function( err, data ){
      if( err ){
        reject( err );
      } else {
        // Put the previous body of your callback here, concluding with...
        resolve();
      }
    })
  });
}

关于javascript - 从网络请求中回答,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54730806/

相关文章:

javascript - 如何使c3js中的轴刻度消失?

javascript - MySQL,根据MIN时间戳选择索引

javascript - 在 TypeScript 中声明 JavaScript 扩展函数

javascript - highcharts:获得 yaxis 标题?

javascript - Foundation – 深层链接到 Accordion 选项卡?

javascript - 全局信息窗口的文本输入

node.js - response.send 不是函数

node.js - 当用户将文档/图像附加到聊天机器人时如何遇到回复(使用对话流构建并进行通信)?

node.js - 无法在 Dialogflow Fulfillment(内联编辑器)中从 Firestore 引入数据

javascript - Dialogflow 履行内联编辑器 api 请求