zoukankan      html  css  js  c++  java
  • 异步函数的串行执行和并行执行

    对于异步函数的串行和并行执行如果处理不好会出现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都会在前面的序列执行完成再执行

  • 相关阅读:
    Python中的魔法方法【技能突破】
    Python简明教程:面向对象【新手必学】
    No such file or directory
    LaTeX Error: File ''picins.sty'' not Found.
    GCC编译过程中的各种not declared in this scope
    20.有效的括号-力扣
    c++标准库bitset文件
    c++标准库windows.h文件
    warning: control reaches end of non-void function
    c++标准库iostream文件
  • 原文地址:https://www.cnblogs.com/zhuxianguo/p/7068740.html
Copyright © 2011-2022 走看看