nodejs并发 eventproxy

时间:2019-02-21
本文章向大家介绍nodejs并发 eventproxy,主要包括nodejs并发 eventproxy使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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’事件 
      }
    })
]);

并发执行返回的数据