您的位置:首页 > Web前端 > Node.js

node(async原理)

2015-08-20 17:14 691 查看
node中的async是用来实现同步操作的,提供包括map、Series等方法,本文不做赘述。

由于项目需要在浏览器端用了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).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: