首页 > 语言 > JavaScript > 正文

Nodejs异步流程框架async的方法

2024-05-06 15:38:13
字体:
来源:转载
供稿:网友

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)});            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选