var newArr = [];
for(i in arr){
用arr[i]异步获取到对应的数据data
newArr.push(data);
}
想要使用newArr,
alert(newArr.length)结果为0,
除了setTimeout之外还有更好的办法吗?
http://.com/q/1010000004169937?utm_source=APP&utm_medium=iOS&utm_campaign=socialShare
异步并发
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)
});
我再提供一个用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);
});
题主,我用手机敲了这么多代码,你不给我一个赞怎么行啊?:)