eventproxy处理并发事件
eventproxy属于eventemitter,有和其相似的方法
addListener on once 注册事件
emit 触发事件
removeListener(‘evnt’,eventHandle) removeAllListeners([…events]) 清除事件
eventproxy常用方法:
1、需要ev1、ev2、ev3并发执行之后执行callback:
.all(‘ev1’,‘ev2’,‘ev3’,(ev1,ev2,ev3)=>{
callback(arguments);
}) 注册并发执行的’ev1’,‘ev2’,‘ev3’…等事件
.emit(‘ev1’,ev1) … 触发事件并返回数据
2、有一组urls:[url1,url2,url3…]需要并发执行
.after(‘topic’,urls.length,([])=>{}); 注册并发执行urls.length次的事件’topic’
const Eventproxy = require('eventproxy');
var request = require('request');
const urls = ['http://baidu.com?id=123r42', 'http://baidu.com?id=123r43', 'http://baidu.com?id=123r44'];
const most = urls.length;//并发数
const eq = new Eventproxy();
const data = [];
eq.after('topics', most, (topic) => {//topic [[url0,data0],[url1,data1]]
topic.map((item) => {
data.push({
url: item[0],
resdata: item[1]
})
})
console.log(data);
return data;
});
//添加error handler
eq.fail((err) => {
console.log(err);
});
urls.map((item) => [
request(item, function (error, response, body) {
if (!error && response.statusCode == 200) {
eq.emit('topics', [item, body]);//触发‘topic’事件
}
})
]);
并发执行返回的数据