手动实现promise.all和promise.race

这篇博客探讨了JavaScript中Promise.all和Promise.race的实现细节。myAll函数模拟了Promise.all的行为,等待所有Promise解析后返回结果数组。myRace函数则在第一个Promise解析或拒绝时立即响应。示例展示了如何使用这两个自定义函数处理多个Promise实例。

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

// all
function myAll(iterators) {
	const promises = Array.from(iterators);
	const len = promises.length;
	let count = 0;
	let results = [];
	return new Promise((resolve, reject) => {
		promises.forEach((v, i) => {
			Promise.resolve(v).then(value => {
				count++;
				results[i] = value;
				if (count === len) {
					resolve(results)
				}
			}).catch(e => {
				reject(e);
			})
		})
	})
}
var p1 = Promise.resolve('a');
var p2 = Promise.resolve('b');
var p3 = Promise.resolve('c');
myAll([p1, p2, p3]).then(function (value) {
	console.log(value);
})

// race
function myRace(iterators) {
	const promises = Array.from(iterators);
	const len = promises.length;
	return new Promise((resolve, reject) => {
		promises.forEach(v => {
			v.then(value => {
				resolve(value)
			},reason => {
				reject(reason)
			})
		})
	})
}
var p1 = Promise.resolve('a');
var p2 = Promise.resolve('b');
var p3 = Promise.reject('c');
myRace([p1, p2, p3]).then(function (value) {
	console.log(value);
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值