node.js 多异步之间的协作方案

《深入浅出node.js》 P77 学习

///用于处理多个事件对应一个侦听器的情况
var
count = 0; var results = {}; var done = function (key, value){ results[key] = value; count++; if (count === 3){ ///渲染页面 render(results); } }; fs.readFile(template_path, "utf8", function(err, template){ done("template", template); }); db.query(sql, function(err, data){ done("data", data); }); lion.get(funciton (err, resources){ done("resources", resources); }); ///2015-10-14 11:05:49 ///使用偏函数来处理哨兵变量和第三方函数的关系 var after = function (times, callback) { var count = 0, results = {}; return function (key, value){ results[key] = value; count++; if (count === times) { callback(results); } }; }; var done = after(times, render); ///事实上这是在对done作初始化,同时初始化的还有done的属性count, results ///如果再用after初始化另外一个函数,则二者之间的count和results互不相干。 done = function (key, value){ results[key] = value; count++; if (count === times) { callback(results); } } emitter.on("done", done); ///事实上是 emitter.on("done", function(key, value){ results[key] = value; count++; if (count === times) { callback(results); } }) emitter.emit("done", "template", template); ///监听到事件之后,运行的函数变成: emitter.on("done", function("template", template){ functionbody; })
原文地址:https://www.cnblogs.com/lswit/p/4876906.html