Node.js自带了对核心events模块中的events的内置支持。
使用require("events")加载模块。
events模块有一个简单的类“EventEmitter”。
EventEmitter是一个类,旨在使其易于发出events和订阅引发的events。
以下代码提供了一个小代码示例,其中我们订阅了一个事件,然后引发它。
var EventEmitter = require("events").EventEmitter;
var emitter = new EventEmitter();
// Subscribe
emitter.on("foo", function (arg1, arg2) {
console.log("Foo raised, Args:", arg1, arg2);
});
// Emit
emitter.emit("foo", { a: 123 }, { b: 456 });
我们可以用一个简单的 new EventEmitter
调用创建一个新的实例。
要订阅events,请使用事件名称中的 on
函数传递,后面跟随事件处理函数。
最后,我们使用 emit
函数引发一个事件,传递跟随有任意数量我们想传递给监听器的参数的事件名称。
以下代码显示了如何为一个事件拥有多个订阅者。
var EventEmitter = require("events").EventEmitter;
var emitter = new EventEmitter();
//from www..cn
emitter.on("foo", function () {
console.log("subscriber 1");
});
emitter.on("foo", function () {
console.log("subscriber 2");
});
// Emit
emitter.emit("foo");
上面的代码生成以下结果。
监听器按它们为事件注册的顺序调用。
为事件传入的任何参数在各个订阅者之间共享。
var EventEmitter = require("events").EventEmitter;
var emitter = new EventEmitter();
// www..cn
emitter.on("foo", function (ev) {
console.log("subscriber 1:", ev);
ev.handled = true;
});
emitter.on("foo", function (ev) {
if (ev.handled) {
console.log("event already handled");
}
});
// Emit
emitter.emit("foo", {handled: false });
在此示例中,第一个监听器修改了传递的事件参数,第二个监听器获取了修改的对象。
EventEmitter有一个removeListener函数,它接收一个跟随函数对象的事件名称从侦听队列中进行删除。
我们必须有一个对你想从监听队列中删除的函数的引用。
以下代码显示如何取消订阅监听器。
var EventEmitter = require("events").EventEmitter;
var emitter = new EventEmitter();
//from www..cn
var fooHandler = function () {
console.log("handler called");
// Unsubscribe
emitter.removeListener("foo",fooHandler);
};
emitter.on("foo", fooHandler);
// Emit twice
emitter.emit("foo");
emitter.emit("foo");
在此示例中,我们在引发一次后取消订阅事件。结果,第二事件不被注意。
EventEmitter提供了仅一次调用已注册监听器“once”的函数。
var EventEmitter = require("events").EventEmitter;
var emitter = new EventEmitter();
emitter.once("foo", function () {
console.log("foo has been raised");
});
// Emit twice
emitter.emit("foo");
emitter.emit("foo");
foo的事件监听器将只被调用一次。
以下是在Node.js中创建Web应用程序的主要核心网络模块:net / require(net)the foundation for creating TCP server and clients ...
Node.js Domain 模块Node.js 工具模块Node.js Domain(域) 简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的异常。引入 ...
JavaScript中的所有数字都是64位IEEE 754双精度浮点数,都具有相同的浮点数类型。算术运算(+, - ,*,/,%)对数字起作用。var ...
Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。Node.js 的每一个 API 都是异步的,并作为一个...