javascript - 遍历异步获取数据添加到数组里后怎么才能使用上
天蓬老师
天蓬老师 2017-04-10 16:39:51
[JavaScript讨论组]
var newArr = [];
for(i in arr){
    用arr[i]异步获取到对应的数据data
    newArr.push(data);
}
想要使用newArr,
alert(newArr.length)结果为0,
除了setTimeout之外还有更好的办法吗?
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
PHP中文网

异步并发

function myLogicFun(arr,allDoneCallback){
    var i, newArr=[],totalItemLength=arr.length;
    
    function watcher(resultData){
        newArr.push(resultData);
        if(newArr.length===totalItemLength){
            //all done
            allDoneCallback(newArr);
        }
    }
    
    for(i=0;i< totalItemLength;i++){
        (function(item){
            //do your business
            watcher(resultData);
        }(arr[i]));
    }
   
}

var arr=[....];
myLogicFun(arr,function(resultDaas){
    console.log(resultDaas)
});

或者异步顺序

function myLogicFun(arr,allDoneCallback){
    var arrtmp=arr.slice(0);
    var newArr=[];
    function doNext(){
        var someItem= arrtmp.shift();
        if(someItem){
            doAsync(function(resultData){
                newArr.push(resultData);
                doNext();
            });
        }else{
            //all done
            allDoneCallback(newArr);
        }
    }
    
    doNext();
    
}

var arr=[....];
myLogicFun(arr,function(resultDaas){
    console.log(resultDaas)
});
大家讲道理

http://segmentfault.com/q/1010000004169937?utm_source=APP&utm_medium=iOS&utm_campaign=socialShare

高洛峰

我再提供一个用Promise的解决方案:

// 这是你请求数据的方法,注意我是用steTimeout模拟的
function fetchData(req) {
    return new Promise(function(resolve) {
        setTimeout((function() {
                resovle('resp: ' + (+new Date));
        }, 1000);
    });
}

var arr = [1, 2, 3, 4];

// 用数组里面的元素做请求,去获取响应数据
var promiseArr = arr.map((function(req) {
        return fetch(req);
);

Promise.all(promiseArr).then(function(respDataArr) {
    // 在这里使用最终的数据
    console.log(respDataArr);
});

题主,我用手机敲了这么多代码,你不给我一个赞怎么行啊?:)

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号