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;
})
时间: 2024-10-11 07:21:40

node.js 多异步之间的协作方案的相关文章

【译】深入理解python3.4中Asyncio库与Node.js的异步IO机制

转载自http://xidui.github.io/2015/10/29/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python3-4-Asyncio%E5%BA%93%E4%B8%8ENode-js%E7%9A%84%E5%BC%82%E6%AD%A5IO%E6%9C%BA%E5%88%B6/ 译者:xidui原文: http://sahandsaba.com/understanding-asyncio-node-js-python-3-4.html 译者前言 如

node.js笔记——文件之间的引入

node.js的基础语法就是JavaScript的语法,所以对于懂得javascript的同学来说要容易一些,至于环境的配置也要相对简单很多,可以访问官方文档进行安装.这里分享一下我在学习中总结的一些东西,这是第一篇先来说说文件之间如何进行引入并互相使用变量及函数. 码缘»node.js笔记——文件之间的引入 http://www.ithome.ren/2017/05/31/node-js1.html

Node.js的异步I/O

Linux操作系统的I/O模型 JAVA的NIO引入了异步I/O,而Node.js宣称的就是异步编程,I/O自然是异步的.其实操作系统在很早就引入了异步I/O的概念,如下图(摘自Unix网络编程中的图片): 我对上图的理解有几点: 从IO设备读取数据到用户内存的整个过程都是由系统内核来完成: 数据总是先被拷贝到内核缓冲区,再由内核缓冲区拷贝到用户内存: 除了异步I/O,其余4种I/O模型其实都是阻塞的,至少在数据从内核拷贝到用户内存时是阻塞的: 虽然异步I/O看上去是理想解决方案,但实现上现在用

对Node.js的异步机制的思考

Node.js的异步机制是其最大的特色,异步可以应对高并发,具有很好的性能. 但是如果在某个方法里,涉及到数据库的多层查询,异步机制反而成为阻碍.当执行完第一层SQL后,根据所得的结果集(rows)进行结果集进行遍历时,每次遍历的结果作为where条件再执行下一层SQL时,下一层及以后的SQL并不会执行,而是在结果集(rows)遍历到最后时,才执行下一层SQL. 这时,若SQL只有两三层,其实倒还好,可以合并SQL:但是SQL层数多了之后,这种异步机制却是最大的阻碍.这时,就需要用到Node.j

Node.js 和 C++ 之间的类型转换

我非常喜欢使用 Node.js开发,但是当涉及到计算密集型的场景时 Node.js 就不能够很好地胜任了.而在这样的情况下 C++ 是一个很好的选择,非常幸运 Node.js 官方提供了C/C++ Addons 的机制让我们能够使用 V8 API 把Node.js 和 C++ 结合起来. 虽然在 Node.js 官方网站有很多的关于怎么使用这些 API 的文档,但是在 JavaScript 和 C++ 之间传递数据是一件非常麻烦的事情,C++ 是强类型语言("1024" 是字符串类型而

node.js的异步I/O、事件驱动、单线程

nodejs的特点总共有以下几点 异步I/O(非阻塞I/O) 事件驱动 单线程 擅长I/O密集型,不擅长CPU密集型 高并发 下面是一道很经典的面试题,描述了node的整体运行机制,相信很多人都碰到了.这道题背后的原理就是nodejs代码执行顺序 setTimeout(function() { console.log('4'); },0) setImmediate(function() { console.log('5'); }) let s = new Promise(function(res

node.js接收异步任务结果的两种方法----callback和事件广播

事件广播 发送方调用emit方法,接收方调用on方法,无论发送方或是接收方,都会工作在一个频道 声明了一个模块,用于读取mime.json中的记录 var fs = require('fs'); var events = require('events'); var eventemitter = new events.EventEmitter(); var getmimetype = function (path,eventemitter,suffix) { fs.readFile(path,f

Node.js入门:异步IO

异步IO 在操作系统中,程序运行的空间分为内核空间和用户空间.我们常常提起的异步I/O,其实质是用户空间中的程序不用依赖内核空间中的I/O操作实际完成,即可进行后续任务. 同步IO的并行模式 多线程单进程    多线程的设计之处就是为了在共享的程序空间中,实现并行处理任务,从而达到充分利用CPU的效果.多线程的缺点在于执行时上下文交换的开销较大,和状态同步(锁)的问题.同样它也使得程序的编写和调用复杂化. 单线程多进程 为了避免多线程造成的使用不便问题,有的语言选择了单线程保持调用简单化,采用启

深入理解node.js异步编程

1. 概述目前开源社区最火热的技术当属Node.js莫属了,作为使用Javascript为主要开发语言的服务器端编程技术和平台,一开始就注定会引人瞩目. 当然能够吸引众人的目光,肯定不是三教九流之辈,必然拥有独特的优势和魅力,才能引起群猿追逐.其中当属异步IO和事件编程模型,本文据Node.js的异步IO和事件编程做深入分析. ##2. 什么是异步同步和异步是一个比较早的概念,大抵在操作系统发明时应该就出现了.举一个最简单的生活中的例子,比如发短信的情况会比较好说明他们的区别:同步:正在处于苦逼