用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弄出来
  }
})

});
}`

阅读 1.5k
3 个回答
✓ 已被采纳新手上路,请多包涵

是我自己思路错了,想要使用数据,只能做成一个持久的服务器,得到请求后,相应一次使用..

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

有很多方法异步获取信息,可以使用回调,可以使用Promise,可以使用async/await,看你喜好了

推荐问题