美文网首页NodeJS in LNNM技术文程序员
javascript同步和异步处理数组的几种方法

javascript同步和异步处理数组的几种方法

作者: 明明三省 | 来源:发表于2015-07-23 15:51 被阅读1551次

用函数依次处理数组中的每一项是一个常见的需求。

当需要同步的函数处理时通常会写出下面的代码:

var i = 0,length = arr.length;
for( ;i<length; i++){
    asny(arr[i]);
}
//All array items has been processed!

当函数是异步的时候上面的方法就不能保证循环结束后所有的数组成员都已近处理完毕。如果数组成员需要一个一个的并行的处理一般需要下面的处理方法。

(function next(i,length,callback){
    if(i<length){
        asny(arr[i],function(value){
            arr[i] = value;
            next(i++,length,callnack)
        });
    }else{
        callback();
   }
})(0,arr.length,function(){
    //all array items has been processed!
});

可以看到,以上代码在异步函数执行一次并返回执行结果后才传入下一个数组成员并开始下一轮执行,直到所有数组成员处理完毕后,通过回调的方式触发后续代码的执行。如果数组成员可以并行处理,但后续代码仍然需要所有数组成员处理完毕后才能执行的话,则异步代码会调整成以下形式:

(function(i,length,count,callback){
    for(;i<length;i++){
        (function(i){
            asny(i,function(value){
                arr[i] = value;
                if(++count == length)  callback();
            })
        })(i)  
   }  
})(0,arr.length,0,function(){
    //all array items has been processed!
})

可以看到,与异步串行遍历的版本相比,以上代码并行处理所有数组成员,并通过计数器变量来判断什么时候所有数组成员都处理完毕了。

相关文章

  • javascript同步和异步处理数组的几种方法

    用函数依次处理数组中的每一项是一个常见的需求。 当需要同步的函数处理时通常会写出下面的代码: 当函数是异步的时候上...

  • 异步处理async和await

    异步操作的几种手法 : 1. 回调函数2. 事件的方法3. generator 处理将 异步代码写成同步的方式 4...

  • 前端常见面试题(十)

    目录: 1,简述同步和异步的区别 2, 数组去重(手写代码) 3, 在JavaScript中什么是伪数组?如何将伪...

  • ajax json

    一、ajax: async javascript and xml 异步的javascript和xml技术 二、同步...

  • 小程序中异步处理的几种方式对比

    异步处理方式 1.异步处理的几种方式 纯粹的异步回调函数callback promise方法 (async,awa...

  • iOS网络请求

    一、NSURLConnection NSURLConnection常见的发送请求方法有以下几种 同步请求 异步请求...

  • 多线程-相关概念

    一.同步(Synchronous)和异步(Asynchronous) 同步和异步通常用来形容一次方法调用,同步方法...

  • 同步或异步异常处理

    同步或异步异常处理 同步读取异常处理 异步读取文件异常处理

  • Spring事件

    关键类 遵循流程 异步处理 默认Spring事件同步处理 异步关键1、开启@EnableAsync2、方法上添加@...

  • 分布式之异步处理

    同步和异步处理 处理一般可以分为同步和异步两种。同步的处理就像我们生活中打电话,打电话的双方都需要做即时的响应处理...

网友评论

  • WaterInStone:"如果数组成员需要一个一个的并行的处理一般需要下面的处理方法......" 的方法中 "next(i++,length,callnack)" 应改为"next(++i,length,callback)",否则陷入死循环且无法运行

本文标题:javascript同步和异步处理数组的几种方法

本文链接:https://www.haomeiwen.com/subject/pbzpqttx.html