koa 获取eventproxy中异步的值,返回给前端?

发布于 2022-09-04 05:04:22 字数 1795 浏览 12 评论 0

  var _ = require('lodash');
  
  var redis = require("redis");
  
  var cheerio = require('cheerio');
  
  var router = require('koa-router')();
  
  var superagent = require('superagent');
  
  let eventproxy = require('eventproxy');
  
  
  var ep = new eventproxy();
  
  let rets = []
  var client = redis.createClient();
  
  client.on("error", function (err) {
      console.log("Error " + err);
  });
      
  
  router.get('/', async function (ctx, next) {
      let keys = JSON.parse(ctx.query.key).split(',').reverse()
      
      let kVals = [];
      
      keys.forEach(key=>{
          let url = encodeURI(`http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=${key}`)
          superagent.get(url)
                  .end((err,res)=>{
                      console.log(`fetch------${key}------successful-----`)
                      let $  = cheerio.load(res.text)
                      let datas = Array.from($(".result")).splice(0,5)
                      for (var i = datas.length - 1; i >= 0; i--) {
                          let data = {
                              title:$(datas[i]).find('.c-title').text(),    
                              author:$(datas[i]).find('.c-author').text(),
                              summary:$(datas[i]).find('.c-summary').text()
                          }
                          kVals.unshift(data)
                      }
                      ep.emit('news',kVals)
                  })
      })
  
      ep.after('news',keys.length,rets=>{
          rets = rets.map(ret=>{
              return(ret)
          })    
      })
  
  
      ctx.state = {
          title: '数据搜索结果页',
          ret:ret//如何获取异步的信息?
      };
      await ctx.render('results');
  })
  module.exports = router;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月棠 2022-09-11 05:04:22

这个使用异步流程控制库 async 就可以了

async.map(['file1','file2','file3'], fs.stat, function(err, results) {
    // results is now an array of stats for each file
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文