Async的简单介绍:
Async是一个流程控制工具包,提供了直接而强大的异步功能。基于Javascript为Node.js设计,同时也可以直接在浏览器中使用。Async提供了大约20个函数,包括常用的map, reduce, filter, forEach等,异步流程控制模式包括,串行(series),并行(parallel),瀑布(waterfall)等。
https://github.com/caolan/async
我们常用的是以下四种:
- 串行无关联
- 串行有关联
- 并行无关联
- 智能控制
1.async.series:串行无关联:
多个函数或方法要依次执行,但是他们之间并没有什么联系,只有先后的顺序,比如我要写一个文件,写完之后像用户发送邮件,这两者之间没有必然的联系,但是发邮件必须在写文件完成之后。
async里有一个方法series可以实现这一流程,代码实现如下:
var async = require('async'); console.time('series'); async.series({ one: function(callback) { callback(null, 'one');//callback('i am err','one');异常处理 }, two: function(callback) { callback(null, 'two'); }, }, function(error, result) { //最后结果 console.log('error: ' + error); console.log('result: ' + result); console.timeEnd('series'); }); // error: null // result: [object Object] // series: 4.472ms
2.async.waterfall:串行有关联
瀑布流函数,串行执行数组中的每一个函数最后执行回调。 语法:async.waterfall(tasks,callback) 第一个参数tasks是一个数组,数组包含的是需要依次执行的函数。
第二个参数为回调函数,当瀑布流函数(即tasks数组中的函数)执行出现错误时会执行这个回调函数并将错误信息返回,当瀑布流函数无错误时,会在执行完tasks数组中包含的函数后执行这个回调函数。
用法示例: 一般用法:
async.waterfall([ myFirstFun, mySecondFun, myLastFun ],function(err,result) { // result回调函数 // result 相当于tasks数组中最后一个函数(myLastFun)的返回值done console.log(result); // myLastFun }) function myFirstFun(callback) { callback(null,'one','two'); } function mySecondFun(arg1,arg2,callback) { // arg1 相当于 'one' ,arg2 相当于 'two' callback(null,'three'); } function myLastFun(arg1,callback) { // arg1 相当于 'three' callback(null,'done'); }
3.async.parallel:并行无关联
task并行运行函数集合,而不必等到上一个函数完成。如果任何函数发生错误,会立刻执行回调函数,并返回错误信息;若没有发生错误,则会再所有tasks函数执行完毕之后用回掉函数将结果返回。
语法:async.parallel(tasks,callback) 代码示例:
async.parallel([ function(callback) { setTimeout(function() { callback(null, 'one'); }, 200); }, function(callback) { setTimeout(function() { callback(null, 'two'); }, 100); } ],function(err, results) { console.log(result)} );
4.async.auto:智能控制
以上都是纯串行传并行,但是当一个场景里,需要使用串行也需要使用并行的时候,虽然分别写能解决,但是效率不是很高,维护性也不是很好,auto可以解决这一问题。
如下场景:
- 从某处取得数据
- 在硬盘上建立一个新的目录
- 将数据写入到目录下某文件
- 发送邮件,将文件以附件形式发送给其它人。
- 可以知道1与2可以并行执行,3需要等1和2完成,4要等3完成。
- 使用auto来解决
var async = require('async'); console.time('auto'); async.auto({ getData: function(callback) { setTimeout(function() { console.log('1.1: got data'); callback(null, 'mydata'); }, 300); }, makeFolder: function(callback) { setTimeout(function() { console.log('1.1: made folder'); callback(null, 'myfolder'); }, 200); }, writeFile: ['getData', 'makeFolder', function(callback) { setTimeout(function() { console.log('1.1: wrote file'); callback(null, 'myfile'); }, 300); }], emailFiles: ['writeFile', function(callback, results) { console.log('emailed file: ', results.writeFile); callback(null, results.writeFile); }] }, function(err, results) { console.log('err: ', err); console.log('results: ', results); console.timeEnd('auto'); });
结果如下
1.1: made folder
1.1: got data
1.1: wrote file
emailed file: myfile
err: null
results: { makeFolder: 'myfolder',
getData: 'mydata',
writeFile: 'myfile',
emailFiles: 'myfile'
}
auto: 650.972ms
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 周深 /Faouzia《解密 电影原声带》[FLAC/分轨][199.46MB]
- 英雄联盟s14亚军队伍是哪支 英雄联盟s14亚军队伍介绍
- 英雄联盟s14夺冠队伍是哪支 英雄联盟s14夺冠队SKT T1队伍介绍
- faker三冠王是哪几个赛季 faker三冠王赛季介绍
- 岩贵-音乐磁场(AI调音)2CD[WAV]
- 童丽《千愁记旧情》HQII头版限量编号2024[低速原抓WAV+CUE]
- 瑞鸣十五周年纪念3[HQCD限量编号头版][低速原抓WAV+CUE]
- 任天堂专利展示新VR外设:或会随同NS继任机型推出
- 博主制作“Switch 2”模型 与现有掌机对比
- 网友热议IGN为《马路RPG》打5分:要是多元化就能9分了
- 群星《从21世纪安全撤离 电影原声音乐专辑》[320K/MP3][191.19MB]
- 群星《从21世纪安全撤离 电影原声音乐专辑》[FLAC/分轨][592.38MB]
- 群星《奔赴!万人现场 第5期》[320K/MP3][106.99MB]
- 许魏洲.2024-CrossFever交互热爱【智慧大狗】【FLAC分轨】
- BEYOND.1993-FINAL.LIVE.WITH家驹【华纳】【WAV+CUE】