函数返回值: 注意是否有返回值,以及明确内容
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 循环中执行每一个 promise
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 ++; Promise.resolve(iterator).then((r)=>{ },(reason)=>{ rej(reason) }) } if(count === 0){ res(result); } return p; }记录完成的promise,如果全部完成将最终结果resolve
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; }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.race
Promise.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 结果