假设你已经阅读并基本理解了EventProxy的官方说明https://www.npmjs.com/package/eventproxy,否则你有两个选择:
1、先阅读官方说明,再浏览本文
2、如果不愿意做第1条,关闭本页面去别处逛逛。
言归正传。
var fs=require("fs");
varEventProxy=require("eventproxy");
var ep = new EventProxy();
ep.tail('file','counter', function (file, date) {
//注:
// 待所有指定的事件都触发后,将第一次回调
// 以后再触发其中之一的事件,都会回调。
console.log(file);
console.log(date);
});
fs.readFile('D:\\2.txt', 'utf-8', function(err, content) {
ep.emit('file', content);
});
setInterval(function () {
ep.emit('counter', Date());
}, 2000);
运行结果:
4.welcome to my home.
5.welcome to my home.
6.welcome to my home.
Thu Apr 23 2015 16:58:16 GMT+0800 (中国标准时间)
4.welcome to my home.
5.welcome to my home.
6.welcome to my home.
Thu Apr 23 2015 16:58:18 GMT+0800 (中国标准时间)
4.welcome to my home.
5.welcome to my home.
6.welcome to my home.
Thu Apr 23 2015 16:58:20 GMT+0800 (中国标准时间)
4.welcome to my home.
5.welcome to my home.
6.welcome to my home.
Thu Apr 23 2015 16:58:22 GMT+0800 (中国标准时间)
……
可以看到,尽管定时器第二次触发时,'file'事件并没有再次触发,但tail仍然保留着上一次'file'事件的内容,而不是null或undefined。实际上,tail回调函数中所引用的参数,只要用户不显式销毁或释放(例如不对mongodb数据库调用colse方法,如果该参数是个db对象的话,已测),引用的参数将一直有效。