• 异步函数的串行执行和并行执行


    对于异步函数的串行和并行执行如果处理不好会出现js的回调地狱,在这方面async.js是一个不错的解决方案,有时为了缩小代码体积自己diy一个

     //串行执行arr中的函数
     var series= function (arr, callback) {
         var counter = 0;
         var process = function () {
             if (counter < arr.length) {
                 var fun = arr[counter++];
                 if (fun) fun(process);
             } else {
                 if (callback) callback();
             }
         }
         process();
     }
    //并行执行arr中的函数
    var parallel= function (arr,callback) {
        var counter = arr.length;
        var process = function () {
            if (!--counter) {
                if (callback) callback();
            }
        }
        if (counter == 0) {
            if (callback) callback();
        } else {
            arr.forEach(function (fun) {
                if (fun) fun(process);
            });
        }
    }

    应用举例:

     series([
         function (cb) {
             setTimeout(function () {
                 console.log('1');
                 if (cb) cb();
             }, 100);
         },
         function (cb) {
             console.log('2');
             if (cb) cb();
         },
         function (cb) {
             console.log('3');
             if (cb) cb();
         },
     ], function () {
         console.log('complete');
     });

    输出:

    1

    2

    3

    complete

     parallel([
         function (cb) {
             setTimeout(function () {
                 console.log('1');
                 if (cb) cb();
             }, 100);
         },
         function (cb) {
             console.log('2');
             if (cb) cb();
         },
         function (cb) {
             console.log('3');
             if (cb) cb();
         },
     ], function () {
         console.log('complete');
     })

    输出:

    2

    3

    1

    complete

    可以看出series会按定义的顺序执行,parallel不会按定义的顺序执行,但是complete都会在前面的序列执行完成再执行

  • 相关阅读:
    阿里云遇到的坑:CentOS7防火墙(Firewalld),你关了吗?
    阿里云学生机——Mysql配置---教小白入门篇
    关于Javac编译器的那点事(一)
    B树,B+树,B*树简介
    ArrayList动态扩容机制
    满二叉树和完全二叉树
    nginx实践(二)之静态资源web服务(浏览器缓存场景)
    http之cdn介绍
    http之理解304
    nginx实践(一)之静态资源web服务
  • 原文地址:https://www.cnblogs.com/zhuxianguo/p/7068740.html
Copyright © 2020-2023  润新知