闽公网安备 35020302035485号
函数返回值: 注意是否有返回值,以及明确内容
4.返回值:返回的是一个 promise 对象
Promise.all 只传递的迭代器,且所有都是 fulled 状态,才会返回完成
Promise.myAll = (promiseIterator)=>{
let res,rej;
const p = new Promise((resolve,reject)=>{
res = resolve;
rej = reject;
})
return p;
}
阶段二:临界场景 如果传入一个空的迭代器,返回什么?Promise.myAll = (promiseIterator)=>{
let res,rej;
const p = new Promise((resolve,reject)=>{
res = resolve;
rej = reject;
})
const result = [];
let count = 0;
for (const iterator of promiseIterator) {
count ++;
}
if(count === 0){
res(result);
}
return p;
}
阶段三:for 循环中执行每一个 promisePromise.myAll = (promiseIterator)=>{
let res,rej;
const p = new Promise((resolve,reject)=>{
res = resolve;
rej = reject;
})
const result = [];
let count = 0;
for (const iterator of promiseIterator) {
count ++;
Promise.resolve(iterator).then((r)=>{
},(reason)=>{
rej(reason)
})
}
if(count === 0){
res(result);
}
return p;
}
记录完成的promise,如果全部完成将最终结果resolvePromise.myAll = (promiseIterator)=>{
let res,rej;
const p = new Promise((resolve,reject)=>{
res = resolve;
rej = reject;
})
const result = [];
let count = 0;
let fulledCount = 0;
for (const iterator of promiseIterator) {
let i = count;
count ++;
Promise.resolve(iterator).then((r)=>{
result[i] = r;
fulledCount ++;
if(fulledCount === count){
res(result)
}
},(reason)=>{
rej(reason)
})
}
if(count === 0){
res(result);
}
return p;
}
Promise.all 完整代码Promise.myAll = (promiseIterator)=>{
let res,rej;
const p = new Promise((resolve,reject)=>{
res = resolve;
rej = reject;
})
const result = [];
let count = 0;
let fulledCount = 0;
for (const iterator of promiseIterator) {
let i = count;
count ++;
Promise.resolve(iterator).then((r)=>{
result[i] = r;
fulledCount ++;
if(fulledCount === count){
res(result)
}
},(reason)=>{
rej(reason)
})
}
if(count === 0){
res(result);
}
return p;
}
测试验证const promise1 = Promise.resolve(1);
const promise2 = Promise.resolve(2);
const promise3 = Promise.resolve(3);
Promise.all([promise1, promise2, promise3])
.then((results) => {
console.log(results); // 输出: [1, 2, 3]
})
.catch((error) => {
console.error(error);
});
Promise.racePromise.race 无论解决还是拒绝,只要第一个完成立即返回
Promise.race = (promiseIterator)=>{
let res,rej
const p = new Promise((resolve,reject)=>{
res = resolve;
rej = reject;
})
return p;
}
竞赛,不管任何一个先完成都要立即返回Promise.race = (promiseIterator)=>{
let res,rej
const p = new Promise((resolve,reject)=>{
res = resolve;
rej = reject;
})
for (const prom of promiseIterator) {
Promise.resolve(prom).then(value=>{
res(value)
},(reason)=>{
rej(reason)
})
}
return p;
}
测试验证const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 1 resolved');
}, 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('Promise 2 rejected'));
}, 2000);
});
Promise.race([promise1, promise2])
.then((result) => {
console.log(result); // 输出: Promise 1 resolved
})
.catch((error) => {
console.error(error); // 不会执行,因为 promise1 先完成
});
Promise.any 和 Promise.allSettled
Promise.any
作用:从多个 Promise 中返回第一个成功(resolve)的 Promise 结果