Node.js入门:事件机制

2020-12-13 05:18

阅读:277

soscw.com,搜素材
 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 };
soscw.com,搜素材

    这里利用了EventProxy对象的once方法,将所有请求的回调都压入事件队列中,并利用其执行一次就会将监视器移除的特点,保证每一个回调只会被执行一次。对于相同的SQL语句,保证在同一个查询开始到结束的时间中永远只有一次,在这查询期间到来的调用,只需在队列中等待数据就绪即可,节省了重复的数据库调用开销。由于Node.js单线程执行的原因,此处无需担心状态问题。这种方式其实也可以应用到其他远程调用的场景中,即使外部没有缓存策略,也能有效节省重复开销。此处也可以用EventEmitter替代EventProxy,不过可能存在侦听器过多,引发警告,需要调用setMaxListeners(0)移除掉警告,或者设更大的警告阀值。


评论


亲,登录后才可以留言!