JS 快速處理上萬數據 (asyncFor已封裝) - 戴向天

大家好!我叫戴向天

QQ羣:602504799

QQ:809002582

function asyncFor({data,num,handle}){
			return new Promise(function(r,j){
				// arr 數據  num 每組數據的個數
				function getGroup(arr,num){
					let group = []
					for(let i=0;i<arr.length;i+=num){
						group.push(arr.slice(i, i+num))
					}
					return group
				}
				const group = getGroup(data,num)
				let resultGroup= new Array(group.length)
				let doneNum = 0;
				for(let i=0;i < group.length;i++){
					setTimeout(function(){
						doneNum++
						resultGroup[i] = handle?handle(group[i],i*num):group[i]
						if(doneNum === group.length){
							let result = []
							for(let r = 0;r<resultGroup.length;r++){
								result = result.concat(resultGroup[r])
							}
							return r(result)
						}
					})
				}
			})
		}
		
		
		
		// dome 測試
		(async function(){
			const arr = new Array(10000)
			const  nowTime = +new Date()
			const result = await asyncFor({
				data:arr,
				num:500,
				handle:function(res,index){
					for(let i = 0;i < res.length;i++){
						res[i] = {
							name:'戴向天'+(index+i+1),
						}
					}
					return res;
				}
			})
			console.log('共計花費了:'+ (+new Date() - nowTime)+'ms')
			console.log(result)
			console.log('開始重新處理結果')
			const alignTime = +new Date()
			const result2 = await asyncFor({
				data:result,
				num:500,
				handle:function(res,index){
					for(let i = 0;i < res.length;i++){
						res[i] = {
							...res[i],
							index:index+i+1
						}
					}
					return res;
				}
			})
			console.log('共計花費了:'+ (+new Date() - alignTime)+'ms')
			console.log(result2)
		})()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章