async 珠峰培训node正式课笔记 【async】任务流程控制,异步流程控制
var async = require('async');
// series 串形任务
console.time('cost')
async.series({
two:function(callback){
setTimeout(function(){
console.log('串形任务two');
//第一个参数 错误原因,当为真时,接收函数err参数接收到原因,并定为报错,停止执行后边的任务
callback(null,'串形任务two 执行完毕');
},)
},
one:function(callback){
setTimeout(function(){
console.log('串形任务one');
callback(null,'串形任务one 执行完毕');
},)
},
},function(err,seriesRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务
console.log(err,seriesRes);
console.timeEnd('cost')
})
//parallel 并行任务
// 传递给最终的回调函数的是按任务生命顺序排列,而不是完成顺序
console.time('cost_p')
async.parallel({
two:function(callback){
setTimeout(function(){
console.log('并行任务two');
//第一个参数 错误原因,当为真时,接收函数err参数接收到原因,并定为报错,停止执行后边的任务
callback(null,'并行任务two 执行完毕');
},)
},
one:function(callback){
setTimeout(function(){
console.log('并行任务one');
callback(null,'并行任务one 执行完毕');
},)
},
},function(err,seriesRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务
console.log(err,seriesRes);
console.timeEnd('cost_p')
})
// waterfall 瀑布形任务
console.time('cost_w')
async.waterfall([
function(callback){
setTimeout(function(){
console.log('瀑布形任务 1');
//第一个参数 错误原因,当为真时,接收函数err参数接收到原因,并定为报错,停止执行后边的任务
callback(null,'咖啡');
},)
},
function(res,callback){
setTimeout(function(){
console.log('瀑布形任务 2');
callback(null,res+'+加糖');
},)
},
function(res,callback){
setTimeout(function(){
console.log('瀑布形任务 3');
callback(null,res+'+加牛奶');
},)
}
],function(err,seriesRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务
console.log(err,seriesRes);
console.timeEnd('cost_w')
})
//auto 多情况组合任务
// 例:做饭任务
console.time('做饭任务cost:')
async.auto({
water:function(callback){
callback(null,'水')
},
flour:function(callback){
callback(null,'面粉')
},
mix:['water','flour',function(res,callback){
callback(null,res.water+"+"+res.flour+'+和面');
}],
stream:['mix',function(res,cb){
cb(null,res.mix+'+蒸馒头')
}]
},function(err,seriesRes){
console.log(err,seriesRes);
console.timeEnd('做饭任务cost:')
})
async.forEach
var fs = require('fs');
var async = require('async');
var arr = [{
filename:'1.txt',cont:''
},{
filename:'2.txt',cont:''
},{
filename:'3.txt',cont:''
}]
async.forEach(arr,function(item,cb){
},function(err,res){
console.log(err,res)
})
async.each/ async.eachSeries 用法一样
sync.each/ async.eachSeries each是并行,eachSeries是串行。。所以each的某个item抛出错误后其他的不影响,而eachSeries后面的就挂了。。
var pageNumArr = [,,,];
async.each(pageNumArr,function(offsetIndex,callback){
console.log(offsetIndex)
callback(null,'num:'+offsetIndex)
},function(errRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务
// console.log(err,seriesRes)
console.log(errRes)
})
async 珠峰培训node正式课笔记 【async】任务流程控制,异步流程控制的更多相关文章
- 珠峰培训node正式课--【笔记】|全局对象 | process | util | fs | stream 流
全局对象: console : __filename ; __dirname ; setTimeOut ; setImmediate(把参数函数放在下一个环节执行) proc ...
- node 进程管理 child_process [spawn,exec] | 珠峰培训node正式课 网络爬虫
run.js ; function set(){ i++ setTimeout(function(){ console.log(i) ){ set(); } },) }set(); child_pro ...
- 珠峰培训node 珠峰爬虫| cron 定时任务
1.cron 定时任务 CronJob var CronJob = require('cron').CronJob; // 秒 分钟 时 天
- Node.js学习笔记(2)——关于异步编程风格
Node.js的异步编程风格是它的一大特点,在代码中就是体现在回调中. 首先是代码的顺序执行: function heavyCompute(n, callback) { var count = 0, ...
- node核心:异步流程控制
Node.js的异步是整个学习Node.js过程中重中之重. 1)异步流程控制学习重点 2)Api写法:Error-first Callback 和 EventEmitter 3)中流砥柱:Promi ...
- 多线程编程学习笔记——async和await(一)
接上文 多线程编程学习笔记——任务并行库(一) 接上文 多线程编程学习笔记——任务并行库(二) 接上文 多线程编程学习笔记——任务并行库(三) 接上文 多线程编程学习笔记——任务并行库(四) 通过前面 ...
- 多线程编程学习笔记——async和await(二)
接上文 多线程编程学习笔记——async和await(一) 三. 对连续的异步任务使用await操作符 本示例学习如何阅读有多个await方法方法时,程序的实际流程是怎么样的,理解await的异步 ...
- 多线程编程学习笔记——async和await(三)
接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五. 处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...
- es6学习笔记-async函数
1 前情摘要 前段时间时间进行项目开发,需求安排不是很合理,导致一直高强度的加班工作,这一个月不是常说的996,简直是936,还好熬过来了.在此期间不是刚学会了es6的promise,在项目有用到pr ...
随机推荐
- Replication:事务复制 Subscriber的主键列是只读的
在使用Transactional Replication时,Subscriber 被认为是“Read-Only”的 , All data at the Subscriber is “read-only ...
- c#调用python脚本实现排序(适用于python脚本中不包含第三方模块的情况)
引用:https://www.cnblogs.com/zoe-yan/p/10374757.html 利用vs2017c#调用python脚本需要安装IronPython.我是通过vs2017的工具- ...
- Echarts 学习系列(3)-Echarts动态数据交互
写在前面 上一小节,我们总结了折线(面积)图.柱状(条形)图.饼(圆环)图类型的图表. 但是,都是静态的.接下来的,这一小节,总结的是Echarts 动态数据的交换. 前置条件 开发环境:win10 ...
- 树莓派安装使用docker
2019/11/11, 树莓派4B, Raspbian Buster,Docker 19.03.4 摘要:树莓派Raspbian Buster中安装Docker,Dockerfile更改软件源 安装d ...
- mvc_第一遍_业务逻辑层和模型
常用的动态网页对象: 之前我们提到了,使用request对象可以获得和用户请求相关的一系列信息.这一节,我们来看看另外两个常用对象的常规用途. response对象:用于向客户回应.最常用的用法类似于 ...
- DevExpress之GridControl控件小知识
DevExpress之GridControl控件小知识 一.当代码中的DataTable中有建数据关系时,DevExpress 的 GridControl 会自动增加一个子视图 .列名也就是子表的字段 ...
- mybatis中用注解如何处理存储过程返回的多个结果集?
sql代码: create procedure sptest.getnamesanditems() reads sql data dynamic result sets 2 BEGIN ATOMIC ...
- php调用webservice接口,java代码接收不到参数
前段时间做了一个项目的二次开发,有个功能是需要php调用java实现的webservice接口,并传递一些参数给接口,然后按照对方提供的接口说明文档进行传参调用,java那边有接收到请求,但是参数总是 ...
- MySQL里默认的几个库是干啥的?
本文涉及:MySQL安装后自带的4个数据库:information_schema. performance_schema.sys.mysql的作用及其中各个表所存储的数据含义 information_ ...
- 【转载】 C#中手动创建一个DataTable对象并写入数据
在C#操作集合数据的过程中,有时候需要手动创建一个DataTable对象,并手动设置DataTable对象的Columns列名等信息,最后再往手动创建的DataTable对象中写入相应的数据信息,此时 ...