码迷,mamicode.com
首页 > Web开发 > 详细

Nodejs Guides(四)

时间:2018-01-31 14:24:38      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:listen   remove   最佳实践   pos   dia   mit   条件   require   避免   

EVENTS

events模块API实例 

const EventEmitter = require(‘events‘);

class MyEmitter extends EventEmitter {
}
//EventListener 会按照监听器注册的顺序同步地调用所有监听器。
//所以需要确保事件的正确排序且避免竞争条件或逻辑错误。
//监听器函数可以使用 setImmediate() 或 process.nextTick() 方法切换到异步操作模式:
const myEmitter = new MyEmitter();
myEmitter.on(‘event‘, (a, b) => {
    setImmediate(() => {
        console.log(‘这个是异步发生的‘);
    });
});
myEmitter.on(‘event1‘, () => {
    console.log(‘触发了一个事件1!‘);
});
myEmitter.on(‘event2‘, () => {
    console.log(‘触发了一个事件2!‘);
});
//eventEmitter.once() 方法时可以注册一个对于特定事件最多被调用一次的监听器。 当事件被触发时,监听器会被注销,然后再调用。
let m = 0;
myEmitter.once(‘event3‘, () => {
    console.log(++m);
});
//当EventEmitter 实例中发生错误时,会触发一个 ‘error‘ 事件。 这在 Node.js 中是特殊情况。
//最佳实践,应该始终为 ‘error‘ 事件注册监听器。
myEmitter.on(‘error‘, (err) => {
    console.error(‘有错误‘);
});
//emitter.prependListener() 方法可用于将事件监听器添加到监听器数组的开头。
myEmitter.prependListener(‘event‘, () => console.log(‘b‘));
//添加一个单次 listener 函数到名为 eventName 的事件的监听器数组的开头。 下次触发 eventName 事件时,监听器会被移除,然后调用。
myEmitter.prependOnceListener(‘event‘, (stream) => {
    console.log(‘c‘);
});
myEmitter.emit(‘error‘, new Error(‘whoops!‘));
myEmitter.emit(‘event3‘);
myEmitter.emit(‘event3‘);
myEmitter.emit(‘event‘);
myEmitter.emit(‘event2‘);
myEmitter.emit(‘event1‘);
myEmitter.emit(‘event‘);
const EventEmitter = require(‘events‘);
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();

//this指向MyEmitter
// myEmitter.on(‘event‘, function (a, b) {
//     console.log(a, b, this);
// });

//this指向空对象
myEmitter.on(‘event‘, (a, b) => {
    console.log(a, b, this);
    // 打印: a b {}
});

myEmitter.emit(‘event‘, ‘a‘, ‘b‘);
const EventEmitter = require(‘events‘);

class MyEmitter extends EventEmitter {
}

const myEmitter = new MyEmitter();
// 当EventListener 所注册的事件发生的时候,该方法会被调用
myEmitter.once(‘newListener‘, (event, listener) => {
    if (event === ‘event‘) {
        // 在开头插入一个新的监听器
        myEmitter.on(‘event‘, () => {
            console.log(‘B‘);
        });
    }
});
myEmitter.on(‘event‘, () => {
    console.log(‘A‘);
});
myEmitter.emit(‘event‘);
myEmitter.emit(‘event‘);
const EventEmitter = require(‘events‘);
class MyEmitter extends EventEmitter {
}
const myEmitter = new MyEmitter();
// 在事件触发后、最后一个监听器完成执行后,从名为 eventName 的事件的监听器数组中移除指定的 listener。
const callbackA = () => {
    console.log(‘A‘);
    myEmitter.removeListener(‘event‘, callbackB);
};
const callbackB = () => {
    console.log(‘B‘);
};
myEmitter.on(‘event‘, callbackA);

myEmitter.on(‘event‘, callbackB);

myEmitter.emit(‘event‘);
myEmitter.emit(‘event‘);

 

Nodejs Guides(四)

标签:listen   remove   最佳实践   pos   dia   mit   条件   require   避免   

原文地址:https://www.cnblogs.com/Merrys/p/8391199.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!