在现代 JavaScript 中,Promise 是一种用于处理异步操作的重要工具。通过手写实现一个简单的 Promise 类,我们能更深入地理解 Promise 的工作原理和异步编程的机制。在这篇博客中,我们将逐步构建一个功能齐全的 Promise 类,包括基本结构、then方法、静态方法如resolve、reject、all、allSettled、race和any,以及一些辅助方法。
allSettled的参数和all是一样的, 注意点也一样,就不再重复了,这里需要用到上篇文章中抽出来的三个变量我们也贴进去, // 记录Promise的三种状态constPENDING='pending';constFULFILLED='fulfilled';constREJECTED='rejected';/*** 等待所有的Promise有结果之后* 该方法返回的Promise完成* 并且按照顺序将所有结果汇总*...
5.4 Promise.allSettled() Promise.allSettled() 接收一个 Promise 数组,返回一个新的 Promise,无论所有的 Promise 是成功还是失败,都会在所有 Promise 结束后返回。 Promise.allSettled([promise1, promise2]) .then(results => { console.log(results); // 输出每个 promise 的状态(fulfilled/rejected) }); 1...
这个myAllSettled 函数模拟了 Promise.allSettled 的行为,接收一个 promise 数组,并返回一个在所有 promise 都 settled 后解析为结果数组的 promise。每个结果对象都包含 status(表示 promise 的状态)和 value 或reason(表示 promise 的解析值或拒绝原因)。
手写Promise.all/race/allSettled/any // 有一个失败则返回失败的结果,全部成功返回全成功的数组Promise.all=function(promiseList = []) {returnnewPromise((resolve, reject) =>{constresult = []letcount =0if(promiseList.length===0) {resolve(result)return}for(leti =0; i < promiseList.length; i...
Promise在各种场景的使用(Promise.all、Promise.allSettled、Promise.race、Promise.any) 1、共有三个接口,接口二要根据接口一返回的数据判断是否执行,接口二需要接口一的返回值作为参数;接口三要根据接口二返回的数据判断是否执行,接口三需要接口二的返回值作为参数。 2、共有两个接口,需要等两个接口都成功的返回...
"status": "fulfilled", "value": 2 }, { "status": "fulfilled", "value": 3 } ] */ // 2. 有一个Promise失败了 constp12 =Promise.allSettled([ p1, p2, p4 ]) .then((res) =>console.log(JSON.stringify(res,null,2))) // 输出...
手写Promise.allsettled方法 之前实现过Promsie.all方法,但是all这个方法如果有一个失败了就相当于全部失败了,这种对体验和交互都不友好,Promise.allsettled就是改进版,有失败还会继续执行,等所有的Promsie执行完返回一个对象数组。 Promise.allsettled方法和Promsie.all方法接收参数一样。
allSettled 接收一个Iterable类、只有当传入的所有promise,都敲定(rejected, fullfilled)才将返回的promise兑现,并返回所有promise的结果对象数组 any 接收一个Iterable类,只要可迭代对象中的某一个promise被兑现(fullfilled)就会立即兑现返回的promise,仅当可迭代对象中所有的Promise都被拒绝(rejected),返回的promise对象才会...
Promise.allSettled() Promise.allSettled()方法传入的也是一个可以迭代的promise实例,此方法不论结果为fufilled和rejected都会把结果和状态返回。 constpromise1 =1constpromise2 =newPromise((resolve) =>{setTimeout(() =1> {resolve(2) },1000)