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。

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

asyncjs,waterfall的使用的更多相关文章

  1. jQuery瀑布流插件——jQuery.Waterfall

    插件--jQuery.Waterfall 思路: 其实只要了解了整个流程,要实现这个插件也不难,大家都玩过俄罗斯方块吧,原理差不多,找到合适的地方叠上去就好了,在这里,每个块的宽度是必需给定的,然后计 ...

  2. Waterfall———瀑布流布局插件, 类似于 Pinterest、花瓣、发现啦。

    瀑布流布局插件, 类似于 Pinterest.花瓣.发现啦. En 中文 文档 下载 下载waterfall插件最新版本. 使用 html: <div id="container&qu ...

  3. Android UI 之WaterFall瀑布流效果

        所谓瀑布流效果,简单说就是宽度相同但是高度不同的一大堆图片,分成几列,然后像水流一样向下排列,并随着用户的上下滑动自动加载更多的图片内容.     语言描述比较抽象,具体效果看下面的截图:   ...

  4. async源码学习 - 控制流程waterfall函数

    waterfall函数会连续执行数组中的函数,每次通过数组下一个函数的结果.然而,数组任务中的任意一个函数结果传递失败,那么该函数的下一个函数将不会执行,并且主回调函数立马把错误作为参数执行. 以上是 ...

  5. async.waterfall

    [async.waterfall] if any of the tasks pass an error to their own callback, the next function is not ...

  6. 【SE】Week7 : Silver Bullet & Cathedral and Bazaar & Big Ball of Mud & Waterfall ...

    1. Silver Bullet No Silver Bullet: Essence and Accidents of Software Engineering —— 无银弹理论,出自于美国1999年 ...

  7. kissy初体验-waterfall

    目录: 1. 功能介绍 2. waterfall样例展示 3. 使用说明 4. 遇到过的问题 5. 总结 1. 功能介绍 现在越来越多的网站开始瀑布流方式布局,瀑布流式布局(百度百科:瀑布流),是比较 ...

  8. nodejs waterfall的使用

    waterfall(tasks, [callback]) (多个函数依次执行,且前一个的输出为后一个的输入) 按顺序依次执行多个函数.每一个函数产生的值,都将传给下一个函数.如果中途出错,后面的函数将 ...

  9. waterfall.js

    jq-waterfall是一款仿Pinterest网站的响应式无限动态加载图片瀑布流特效jQuery插件.该瀑布流特效使用ajax调用来动态加载图片,达到无限加载的效果.它使用简单,兼容性好,值得推荐 ...

随机推荐

  1. js防止重复点击

    表单元素 disabled 没有之一. el.prop('disabled', true); ajax({}).done(function() { el.prop('disabled', false) ...

  2. 2015广州强网杯(Misc)

    单身狗: 下载图片 被一只狗挡住了的二维码,用图片处理软件把上面两个正方形随便一个覆盖狗的地方 我直接用美图秀秀处理一下,扫一下就得到flag

  3. Python 标准库 -> Pprint 模块 -> 用于打印 Python 数据结构

    使用 pprint 模块 pprint 模块( pretty printer ) 用于打印 Python 数据结构. 当你在命令行下打印特定数据结构时你会发现它很有用(输出格式比较整齐, 便于阅读). ...

  4. 微信开发准备(二)--springmvc+mybatis项目结构的搭建

    转自:http://www.cuiyongzhi.com/post/34.html 前面一篇有说道如何在MyEclipse中搭建maven项目,这里将继续介绍如何在搭建好的基础maven项目中引入我们 ...

  5. C语言学习笔记--字符串

    字符串是有序字符的集合,C 语言中没有字符串的概念,而是通过特殊的字符数组模拟字符串,是以'\0'结尾的字符数组. 1.字符数组与字符串 (1)在 C 语言中,字双引号引用的单个或多个字符是一种特殊的 ...

  6. HTML以及DOM选择属性

    http://www.cnblogs.com/season-huang/p/3360869.html

  7. latex如何进行多行注释

    单行注释:当LATEX 处理一个源文件时,如果遇到一个百分号%,LATEX 将忽略% 后的该行内容,换11行符以及下一行前的空白字符.多行注释:\begin{comment}rather stupid ...

  8. Mediaplayer

    Mediaplayer报错 prepareAsync called in state 1     是因为在setDataSource之前调用了prepare.因为setDataSource放到了线程里 ...

  9. PROCEDURE存储过程传入表参数

    ) ,itemNum ) ,itemQty )) ---2.创建一个存储过程以表值参数作为输入 alter proc usp_TestProcWithTable     @tb  LocationTa ...

  10. cocos2d中setBlendFunc设置颜色混合方案

    CCSprite有一个ccBlendFunc类型的blendFunc_结构体成员,可以用来设置描绘时的颜色混合方案.ccBlendFunc包含了一个src和一个dst,分别表示源和目标的运算因子. 如 ...