加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

nodejs之async说明(each)

(2016-03-30 14:25:25)
标签:

it

分类: web开发
如果想对同一个集合中的所有元素都执行同一个异步操作,可以利用each函数。
async提供了三种方式:
1. 集合中所有元素并行执行
2. 一个一个顺序执行
3. 分批执行,同一批内并行,批与批之间按顺序(这里暂时不说)
注意:each函数只负责执行,不负责返回值(比如,你想执行某个异步函数10次,并把每个函数的结果放进一个数组中,这时就不能使用each函数) 



(1).eachSeries不是并行执行,而是一个个按顺序执行
var arr = [300,600];
async.eachSeries(arr, function(item, callback) {


    setTimeout(function(){

        //这个函数告诉eachSeries函数,这个异步操作状态,是成功了,还是失败了,传(false)null表示这个异步成功完成,true(1)执行失败,还未执行的不再执行
        callback(null);
        console.log(item);

    }, item);

}, function(err) {

    //所有的异步成功执行完成,err等于null
    console.log(err);

});


(2).
var arr = ["input.txt","input2.txt"];
async.eachSeries(arr, function(item, callback) {

    fs.readFile(item, function (err, data) {
       if (err) {
           return console.error(err);
       }
       console.log("异步顺序读取: " + data.toString());

       //这个函数告诉eachSeries函数,这个异步操作状态,是成功了,还是失败了,传(false)null表示这个异步成功完成,true(1)执行失败,还未执行的不再执行
       callback(null);

    });

}, function(err) {

    //所有的异步成功执行完成,err等于null
    console.log(err);

});






(3) 所有操作并发执行,且全部未出错,最终得到的err为undefined。注意最终callback只有一个参数err。
var arr = [100,200];
async.each(arr, function(item, callback) {

    console.log(item);

    setTimeout(function(){

        callback(null);

    }, item);


}, function(err) {

    console.log(err);

});


(4)
var arr = ["input.txt","input2.txt"];
async.each(arr, function(item, callback) {

    fs.readFile(item, function (err, data) {
       if (err) {
           return console.error(err);
       }
       console.log("异步并发读取: " + data.toString());

       //这个函数告诉eachSeries函数,这个异步操作完成,如果去掉这个函数,eachSeries他就不知道这些函数是否成功执行完成
       callback(null);

    });


}, function(err) {

    console.log(err);

});

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有