Node.js入门:事件机制
2020-12-13 05:18
阅读:277
1 var proxy = new EventProxy(); 2 var status = "ready"; 3 var select = function (callback) { 4 proxy.once("selected", callback); 5 if (status === "ready") { 6 status = "pending"; 7 db.select("SQL", function (results) { 8 proxy.emit("selected", results); 9 status = "ready"; 10 }); 11 } 12 };
这里利用了EventProxy对象的once方法,将所有请求的回调都压入事件队列中,并利用其执行一次就会将监视器移除的特点,保证每一个回调只会被执行一次。对于相同的SQL语句,保证在同一个查询开始到结束的时间中永远只有一次,在这查询期间到来的调用,只需在队列中等待数据就绪即可,节省了重复的数据库调用开销。由于Node.js单线程执行的原因,此处无需担心状态问题。这种方式其实也可以应用到其他远程调用的场景中,即使外部没有缓存策略,也能有效节省重复开销。此处也可以用EventEmitter替代EventProxy,不过可能存在侦听器过多,引发警告,需要调用setMaxListeners(0)移除掉警告,或者设更大的警告阀值。
上一篇:Python比较运算符
评论
亲,登录后才可以留言!