zoukankan      html  css  js  c++  java
  • node(async原理)

    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).

  • 相关阅读:
    python set()、len()、type()、保留小数、EOFError
    代码学习与感悟
    你的代码的风格
    python 面向对象的类
    ubuntu 上下左右键变成ABCD
    python运算符
    python 数据类型详解
    python关键字
    python 设计及调试的一些小技巧
    python-list
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4745810.html
Copyright © 2011-2022 走看看