【问题标题】:Answer from within a network request从网络请求中应答
【发布时间】:2019-02-17 06:40:24
【问题描述】:

我有以下代码

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 时,它不起作用,尽管其中的其他一切都可以正常工作。

当我从外部调用它时,它工作得很好。

我该如何解决这个问题?

【问题讨论】:

    标签: javascript node.js dialogflow-es


    【解决方案1】:

    对于执行异步操作的intent handler(比如获取回调的网络调用),必须返回一个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();
          }
        })
      });
    }
    

    【讨论】:

    • 这太棒了。非常感谢
    猜你喜欢
    • 2016-11-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2021-10-26
    • 1970-01-01
    • 2016-05-28
    相关资源
    最近更新 更多