ES12 中的 Promise.allSettled() 函数详解
随着前端技术的不断发展,JavaScript 也越来越受到开发者的重视。其中,Promise 是其中一种非常重要的异步操作方式。Promise 提供了一种优美的解决方案,以便更好地处理 JavaScript 中的异步代码。
ES12 中增加了一个新的 API:Promise.allSettled() 函数,用于将多个 Promise 实例的状态合并成一个新的 Promise 实例,并返回所有 Promise 实例的状态信息。
Promise.allSettled() 函数与 Promise.all() 函数类似,但不同之处在于 all() 函数中只要有一个 Promise 实例的状态变为 reject,就会返回一个 reject 状态的 Promise 实例,而 allSettled() 函数则会等待所有 Promise 实例的状态都发生了变化,无论是 resolve 还是 reject,都会返回一个 resolve 状态的 Promise 实例,并且该 Promise 实例返回的状态信息中包含了所有 Promise 实例的状态信息,即使一个 Promise 实例的状态是 reject,依然会将其状态信息返回。
语法如下:
Promise.allSettled(promises);
promises:Promise 实例数组
Promise.allSettled() 返回的 Promise 实例的值是一个数组,其中包含了所有 Promise 实例的状态信息。每个元素均为对象,每个对象的结构如下:
{ status: 'fulfilled', // Promise 实例的状态, 取值: 'fulfilled' 或 'rejected' value: 返回值或拒绝原因 // Promise 实例的返回值或拒绝原因 }
下面是一个使用 Promise.allSettled() 函数的示例代码,旨在帮助大家更好地理解:
//定义三个 Promise 实例p1、p2、p3 let p1 = Promise.resolve(1); //Promise.resolve()函数中的参数会被直接传递给 Promise 对象的 then方法,直接返回一个解析值为1的 Promise 对象 let p2 = Promise.reject('reject'); let p3 = new Promise(function (resolve, reject) { setTimeout(resolve, 3000, 'delay'); });
// 使用 Promise.allSettled() 函数合并上面的三个 Promise 实例 Promise.allSettled([p1, p2, p3]).then(function (results) { console.log(results); });
输出结果如下:
[ { status: 'fulfilled', value: 1 }, // p1 的状态为 fulfilled,返回值为 1 { status: 'rejected', reason: 'reject' }, // p2 的状态为 rejected,拒绝原因为 "reject" { status: 'fulfilled', value: 'delay' } // p3 的状态为 fulfilled,返回值为 "delay" ]
从上面的结果可以看出,不论 Promise 实例的状态是 resolve 还是 reject,Promise.allSettled() 函数依然会将其状态信息返回。
总结
ES12 中的 Promise.allSettled() 函数是一个非常有用的异步操作方式,能够将多个 Promise 实例的状态合并并返回所有 Promise 实例的状态信息。无论是进行多种异步操作,还是处理多个异步请求的结果,都可以使用 allSettled() 函数来更好地处理异步代码,从而加快开发进度,提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f99380f6b2d6eab310e222