koa 获取eventproxy中异步的值,返回给前端?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个使用异步流程控制库 async 就可以了