一、allSettled兼容
allSettled是ES2020新增的API,用于将多个Promise实例封装成一个Promise实例,等到所有的Promise实例都返回结果,不管是成功还是失败,包装实例才会结束。但是由于是新增的API,不同的浏览器、Node.js系统版本兼容性可能存在差异。以下是代码示例,保证在不同环境下都能正常运行:
const allSettled = Promise.allSettled || function (promises) { return Promise.all( promises.map((promise) => Promise.resolve(promise).then( (value) => ({ state: 'fulfilled', value, }), (reason) => ({ state: 'rejected', reason, }), ), ), ); };
二、allsettled怎么读
allSettled是由all(全部)和settled(已解决)两个单词组成的,因此读作“all settled”,意为全部已解决。
三、allSettled翻译
allSettled的翻译可以是“所有已完成”、“全部已解决”等,都与其含义相近。
四、allSettled返回顺序
allSettled返回的结果是一个包含所有Promise实例的状态和结果的数组,数组的每个元素都是一个对象,其中包含state属性(fulfilled或rejected)和对应的value或reason。
当所有Promise实例都成功完成时,返回的数组中所有元素的state属性都为fulfilled,value属性对应的是Promise实例的结果。
当至少有一个Promise实例失败时,返回的数组中所有元素的state属性都为rejected,reason属性对应的是Promise实例失败的原因。
并且,allSettled返回的结果的顺序与Promise实例数组的顺序一一对应,即第一个Promise实例的状态和结果对应返回数组的第一个元素,第二个Promise实例对应第二个元素,以此类推。
五、allSettled的应用场景
allSettled可以用于多个Promise实例的并行调用并且对结果统一处理时,比如将多个接口请求封装成Promise实例,使用allSettled对所有接口返回的数据进行统一处理。
此外,allSettled还可以用于某些场景下的错误处理。在使用Promise.all的情况下,一旦有一个Promise实例失败,整个Promise.all返回的Promise实例就会失败,导致其它Promise实例的结果都被忽略。而allSettled则不会忽略任何一个Promise实例的状态和结果,我们可以根据需要对所有Promise实例的状态和结果进行分别处理。
// 将多个接口请求封装成Promise实例 const promise1 = fetch('/api/xxx1'); const promise2 = fetch('/api/xxx2'); const promise3 = fetch('/api/xxx3'); // 使用allSettled对所有接口返回的数据进行统一处理 Promise.allSettled([promise1, promise2, promise3]) .then(results => { // 遍历所有Promise实例的结果 results.forEach(result => { // 根据Promise实例的状态和结果进行分别处理 if (result.state === 'fulfilled') { // 成功处理 console.log(result.value); } else { // 失败处理 console.log(result.reason); } }); });
六、总结
allSettled是ES2020新增的API,用于将多个Promise实例封装成一个Promise实例,等到所有的Promise实例都返回结果,不管是成功还是失败,包装实例才会结束。allSettled返回的结果是一个包含所有Promise实例的状态和结果的数组,数组的每个元素都是一个对象,其中包含state属性(fulfilled或rejected)和对应的value或reason。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/282742.html