为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

叮当猫咪 2019-03-26 17:19:45
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弄出来  }})});}`
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-03-28
?
FFIVE

TA贡献1797条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-03-28
  • 3 回答
  • 0 关注
  • 658 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信