手动实现promise.all的方法

本文提供了两种手动实现Promise.all的方法,通过使用Promise.resolve和循环遍历,确保所有Promise实例完成后返回结果,适用于JavaScript异步编程的学习与实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看promise.all的时候,整理了两种手动实现的写法,方便以后查阅,直接上代码吧

方法一

const promiseAll=(all)=>{
	return new Promise((resolve,reject)=>{
		var countNum=0;
		var res=new Array(all.length);
		for(var i=0;i<all.length;i++){
            ((i)=>{
            	Promise.resolve(all[i]).then((value)=>{
            		countNum++;
            		res[i]=value;
            		if(countNum===all.length){
            			return resolve(res)
            		}
            	},(reason)=>{
            		return reject(reason)
            	})
            })(i)
        }
	})
}
let p1=Promise.resolve(1);
let p2=Promise.resolve('hello I am No2');
let p3=Promise.resolve(3);
 
promiseAll([p1,p2,p3]).then((value)=>{
 	console.log(value)
 })// [1, "hello I am No2", 3]

方法二

const promiseAll=(arr)=>{
  let returnRes=[];//用于存放每次执行后返回结果
  return new Promise(function(resolve,reject){
    let i=0;
    next();
    function next(){
       arr[i].then(function(res){
         returnRes.push(res);//存储每次得到的结果
         i++;
         if(i===arr.length){
           resolve(returnRes);
         }else{
           next();
         }
       })
    }
  })
}
let p1=Promise.resolve(1);
let p2=Promise.resolve('hello I am No2');
let p3=Promise.resolve('hello I am No3');
 
promiseAll([p1,p2,p3]).then((value)=>{
 	console.log(value)
 })// [1, "hello I am No2", "hello I am No3"]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值