用node在网络获取数据时,异步返回数据后,同步已经结束,,有没有办法return出去,到另一个模块

1.想用node和cheerio在网络中抓取数据,然后在另一个模块中使用,但是因为是异步获取数据,当前的同步代码都已经执行完毕,获取到的变量或者return都为空,exports也无法导出,除了在处理函数中临时使用或者存储以外,有什么办法能持续使用,或者导出到另一个模块,return.


2.`function getTitle(url,i){

console.log('正在获取第'+i+'页的内容');


http.get(url+i+'.html',res=>{

var chunks = [];

res.on('data',function(chunk){

  chunks.push(chunk);

});

res.on('end',function(){

  var html = iconv.decode(Buffer.concat(chunks),'gb2312');

  var $ = cheerio.load(html,{decodeEntities:false});

  var asyRes = $('.co_content8 .ulink');

  $('.co_content8 .ulink').each(function(index,ele){

    var dom = $(ele);

    titles.push({

      title:dom.text()

    })

  });

  if (i<2) {

    getTitle(url,++index);

    //获取多页数据

  }else {

    // if (titles) {

    //   save(titles);

    // }

    //读取完毕后,在这里就卡住了..不知道如何把titles弄出来

  }

})

});

}`


叮当猫咪
浏览 659回答 3
3回答

米脂

使用async/await,把异步请求写在async函数中,请求成功后return出去

FFIVE

有很多方法异步获取信息,可以使用回调,可以使用Promise,可以使用async/await,看你喜好了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript