Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从网络请求中应答_Javascript_Node.js_Dialogflow Es - Fatal编程技术网

Javascript 从网络请求中应答

Javascript 从网络请求中应答,javascript,node.js,dialogflow-es,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.Abst

我有以下代码

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
时,它将不起作用,尽管那里的其他一切都可以工作

当我从外面呼叫它时,它工作得很好


如何解决此问题?

对于执行异步操作的意图处理程序(例如获取回调的网络调用),必须返回承诺对象,以指示在返回结果之前需要等待承诺完成

现在还不清楚
ddg
对象是否可以返回承诺,但是您可以在回调中使用类似

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();
      }
    })
  });
}

这很有效。多谢各位