这周开始在导师的带领下尝试些功能点。
因为以前没有真切接触过nodejs开发,尽管看了一些教程,但水平远远不够。只是让我写一个小接口,也用了整整一天时间。但是主要是功能点虽然不麻烦,但是涉及到的插件及库都没有接触过,所以必须不断百度,理清代码。而且代码弄清楚之后,尽管知道实现功能的思路,但就是不知道该怎么下手。不过总算是挣扎着写出了代码。下面来总结一下自己的收获。
一. Async:
Async是一个流程控制工具包,提供了直接而强大的异步功能。基于Javascript为设计,同时也可以直接在浏览器中使用。相比其他流程控制库,async还是相当靠谱及强大的。主要实现了三个部分的流程控制功能:
- 流程控制:control flow
- 集合处理:collections
- 工具类:util
1). 集合: Collections
- each: 如果想对同一个集合中的所有元素都执行同一个异步操作(可以与js中数组操作foreach类比
- map: 对集合的每一个元素执行一步操作,得到的结果将汇总到最终的callback中。而each不关心最后的值。
- filter:对集合元素进行筛选
- reject:与filter相反,将返回为true的值抛弃。
- reduce:类似于js数组操作的reduce方法。并且也有reduceRight方法
- detect:获取集合中第一个满足条件的元素
- sortBy:对集合内元素进行从小到大0排序
- some:对元素进行或操作,只要有一个元素满足条件,callback得到的值为true,否则为false;
- every:对元素进行与操作。只有所有元素满足条件,callback得到的值为true,否则为false
- concat:将多个异步操作得到的结果合并为一个数组。
(具体的代码例子在周末有时间的时候补上)
2). 流程控制: Control Flow
1. series(tasks,[callback]): 串行执行,一个函数数组中的每个函数依次执行。只有上一个函数执行完毕,才回执行下一个函数
如果任何一个函数向它的回调函数中传了一个error,则后面的函数都不会被执行,并且将会立刻会将该error以及已经执行了的函数的结果,传给series中最后那个callback.
2. parallel(tasks,[callback]): 并行执行。每个函数都是立即执行,不需要等待其他函数先执行。传给最终callback的数组中的数据按照tasks中声明的顺序,而不是执行完成的顺序。当所有的函数执行完后(没有出错),则会把每个函数传给其回调函数的结果合并为一个数组,传给series最后的那个callback。
多个series调用部分先后。因为series本身也是异步调用
如果某个函数出错,则立刻将err和已经执行完的函数的结果值传给parallel最终的callback。其它未执行完的函数的值不会传到最终数据,但要占个位置。同时支持json形式的tasks,其最终callback的结果也为json形式。
3. waterfall(tasks,[callback]): 按顺序依次执行一组函数。前一个函数的输出将会成为下一个函数的输入。
......
(还有其他的流程控制方法,有时间的继续写。以上三种是我在看代码遇见比较多,以及自己写代码遇到的印象比较深刻的。)
3). 工具类: Utils
1. memoize: 让某一个函数在内存中缓存它的计算结果。对于相同的参数,只计算一次,下次就直接拿到之前算好的结果。
2. unmemoize: 让已经被缓存的函数,返回不缓存的函数引用。
3. log: 执行某异步函数,并记录它的返回值,日志输出。
4. dir: 与log类似,不同之处在于,会调用浏览器的()函数,显示为DOM视图。
5. noConflict: 如果之前已经在全局域中定义了async变量,当导入本时,会先把之前的async变量保存起来,然后覆盖它。仅仅用于浏览器端,在nodejs中没用。
二、 插件
除了async之外,还接触了不少插件
1. select2 下拉列表插件
2. plupload 文件上传组件
3. UEditor 是一套开源的在线HTML编辑器
最后,感谢我的导师不嫌弃我速度慢。而且教了我很多东西~
参考文章:
/nodejs-async/
/marujunyy/article/details/8695205