node(async原理)
2015-08-20 17:14
691 查看
node中的async是用来实现同步操作的,提供包括map、Series等方法,本文不做赘述。
由于项目需要在浏览器端用了async.js,因此仔细看了下它的代码。原来,一直以为node是在服务端调用了操作系统的锁等同步机制,现在才知道并非如此。
主要针对需要串行执行的函数,核心实现如下:
本质上就是一个递归,其中async.nextTick。在服务端会调用node process的方法,如果直接在浏览器端用,调用的是setTimeout(fn, 0).
由于项目需要在浏览器端用了async.js,因此仔细看了下它的代码。原来,一直以为node是在服务端调用了操作系统的锁等同步机制,现在才知道并非如此。
主要针对需要串行执行的函数,核心实现如下:
async.eachOfSeries = function (obj, iterator, callback) { obj = obj || []; var nextKey = _keyIterator(obj); var key = nextKey(); function iterate() { var sync = true; if (key === null) { return callback(null); } iterator(obj[key], key, function (err) { if (err) { callback(err); } else { key = nextKey(); if (key === null) { return callback(null); } else { if (sync) { async.nextTick(iterate); } else { iterate(); } } } }); sync = false; } iterate(); };
本质上就是一个递归,其中async.nextTick。在服务端会调用node process的方法,如果直接在浏览器端用,调用的是setTimeout(fn, 0).
相关文章推荐
- 19 Remove Nth Node From End of List
- nodejs+ajax实现数据交互
- nodejs创建web服务器之hello world程序
- 【LeetCode】237_Delete Node in a Linked List
- light oj 1094 Farthest Nodes in a Tree(树的直径模板)
- LeetCode之Populating Next Right Pointers in Each Node
- 【LeetCode】116. Populating Next Right Pointers in Each Node
- hadoop出现namenode running as process 18472. Stop it first.
- 使用ZooKeeper ACL特性进行znode控制
- leetcode:Reverse Nodes in k-Group
- LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
- 初学node---1
- Node开发入门
- Lavarel 后台组件frozenode的使用
- nodejs 的序列化与反序列化
- 7天学会NodeJs(里面讲了很多,最后一个大例子,更是讲了一些工程开发流程,很有收获)
- Node开发入门
- nodejs npm常用命令
- node.js基础:模块的创建和引入
- RT-Thread finsh源码分析: finsh_node.c