最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

从网络请求中回答

运维笔记admin11浏览0评论

从网络请求中回答

从网络请求中回答

我有以下代码

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

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论