zoukankan      html  css  js  c++  java
  • asyncjs,waterfall的使用

    waterfall

    waterfall(tasks, [callback]) (多个函数依次执行,且前一个的输出为后一个的输入)

    按顺序依次执行多个函数。每一个函数产生的值,都将传给下一个函数。如果中途出错,后面的函数将不会被执行。错误信息以及之前产生的结果,将传给waterfall最终的callback。

    对于学过了js回调机制的小伙伴,waterfall是比较容易理解的,个人的理解就是,waterfall中传入的函数数组tasks中,后一个函数为前一个函数的回调,使用cb(null,args),这样的形式调用下一个函数,如果出现异常,则直接使用cb(new Error("错误的信息"))这样的方式来捕捉异常,并调用最终的回调函数来处理,在这种情况下,出现异常的函数后面那些函数,将不再继续执行,测试代码如下:

    var async = require('async');
    var a = 10;
    async.waterfall([
        function(cb) {
            console.log("getb")
            setTimeout(function() {
                if (a == 0) {
                    cb(new Error("a不能为0"));
                } else {
                    var b = 1 / a;
                    cb(null, b); //在这里通过回调函数把b传给下一个函数,记得一定要加上null,才能调用数组中得下一个函数,否则,会直接调用最终的回调函数,然后结束函数,则后面的函数将不再执行
                    //如果这里写成cb(b);
                    //结果会变成:
                    /**
                     *getb
                     *0.1
                     **/
                }
            }, 1000);
        },
        function(b, cb) {
            setTimeout(function() {
                console.log("getc")
                var c = b + 1;
                cb(null,c);
            }, 1000);
        }
    ], function(err, result) {
        if (err) {
            console.log(err);
        } else {
            console.log('c:' + result)
        }
    });
    
    
    

    当a = 0时,会直接抛出错误,输出如下:
    getb
    Error: a不能为0
    先执行了第一个函数,在第一个函数中抛出异常之后,直接执行最终的回调函数,并没有接着执行第二个函数。
    a = 10 时,输出如下:
    getb
    getc
    1.1
    先执行了第一个函数,然后把第一个函数算出的b传给了第二个函数,再次算出第二个函数中得C,传给最终的结果result。

    学了这么久的前端,第一次把自己学到的东西总结并记录下来,希望小伙伴们多多指点,互相交流,希望可以在这里学到更多,认识更多。

    ------学习贵在分享,贵在记录,贵在总结。
  • 相关阅读:
    wxpython 简单例子:显示文本框的窗口显示鼠标位置
    wxpython学习:创建最小的空的wxPython程序
    wxPython学习笔记
    5G PDCCH 协议
    FPGA学习
    CCS 5.5下载地址http://www.dianyuan.com/bbs/1492792.html
    朴素贝叶斯
    决策树最后的存储 检测
    决策树 绘图
    决策树 书上的例题
  • 原文地址:https://www.cnblogs.com/kevin1220/p/5641393.html
Copyright © 2011-2022 走看看