KOA2 await无效,并没有等待

router.get('/spider', async (ctx, next) => {
var titles = [ ]
await request({

url:"http://caipiao.163.com/award/cqssc/",
gzip: true,
method:"GET"

},function(e,r,b){

  // console.log(b)
if(!e){
  var $ = cheerio.load(b);
  $('.award-winNum').each(function (idx, element) {
    var $element = $(element);
    // console.log($element.text())
    titles.push({
      title: $element.text()
    })
  })
  console.log(titles)
}

})
ctx.body = titles;
})

await并没有等待。请问如何解决?

后来自己百度解决:
router.get('/spider', async (ctx, next) => {
var that = ctx;

let postData = await spider(ctx)
ctx.body = postData;

})

function spider()
{
return new Promise((resovle, reject) => {

try{
  var titles = [  ]
  request({
    url:"http://caipiao.163.com/award/cqssc/",
    gzip: true,
    method:"GET"
  },function(e,r,b){
      // console.log(b)
    if(!e){
      var $ = cheerio.load(b);
      $('.award-winNum').each(function (idx, element) {
        var $element = $(element);
        // console.log($element.text())
        titles.push({
          title: $element.text()
        })
      })
      resovle(titles);   
    }
  })
} catch (err) {
  reject(err);
}

});

阅读 3.6k
1 个回答
  1. await 后面必须是promise,尼的request第一个版本还是callback
  2. 第2个也是错的
function spider() {
    return new Promise((resolve,reject)=>{
        request(xxx,(e,r)=>{
            e?reject(e):resolve(r);
        });
    });
}

使用

try{
    await spider();
}catch(e){
    console.log(e);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题