promise.all 和 promise.allSettled

2024-09-05 21:52
文章标签 promise allsettled

本文主要是介绍promise.all 和 promise.allSettled,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Promise.all 和 Promise.allSettled 都是用来处理多个 Promise 实例的方法,但是它们之间有几个关键的区别:

Promise.all

Promise.all 接受一个 Promise 的可迭代对象(如数组),并返回一个新的 Promise 实例。这个新的 Promise 实例会在所有输入的 Promise 都成功(resolved)后才成功(resolve),并且返回一个包含所有输入的 Promise 成功值的数组。如果输入的任何一个 Promise 失败(rejected),那么 Promise.all 返回的 Promise 也会立刻失败,并且失败的原因是第一个失败的 Promise 的失败原因。

例子
const p1 = Promise.resolve(3);
const p2 = 42;
const p3 = new Promise((resolve, reject) => setTimeout(resolve, 100, 'foo'));Promise.all([p1, p2, p3]).then((values) => {console.log(values); // expected output: Array [3, 42, "foo"]
});const p4 = Promise.reject(new Error('Whoops!'));Promise.all([p1, p2, p4]).catch((reason) => {console.log(reason); // expected output: Error: Whoops!
});

Promise.allSettled

Promise.allSettled 同样接受一个 Promise 的可迭代对象,并返回一个新的 Promise 实例。这个新的 Promise 实例会在所有输入的 Promise 都已解决(settled,即 resolved 或 rejected)后才成功(resolve),并且返回一个包含所有输入的 Promise 结果的对象数组。这些对象具有 status 和 value(对于 resolved 的 Promise)或 reason(对于 rejected 的 Promise)属性。

例子
const p1 = Promise.resolve(3);
const p2 = Promise.reject(new Error('Failed'));
const p3 = 42;Promise.allSettled([p1, p2, p3]).then((results) => {results.forEach((result, i) => {console.log(`Promise ${i} status: ${result.status}`);if (result.status === 'fulfilled') {console.log(`Value: ${result.value}`);} else if (result.status === 'rejected') {console.log(`Reason: ${result.reason.message}`);}});
});
// 输出:
// Promise 0 status: fulfilled
// Value: 3
// Promise 1 status: rejected
// Reason: Failed
// Promise 2 status: fulfilled
// Value: 42

区别总结

行为差异:Promise.all 会在任何一个输入的 Promise 失败时立即失败,而 Promise.allSettled 则会等待所有输入的 Promise 解决(无论是成功还是失败)后才成功。
返回值差异:Promise.all 返回的是一个包含所有成功值的数组,而 Promise.allSettled 返回的是一个包含每个 Promise 的解决状态的对象数组。
在 Vue 模板中的应用
在 Vue 模板中,如果你需要确保所有请求都完成后再做某些操作,无论这些请求是否成功,你应该使用 Promise.allSettled。这样可以确保不会因为某个请求失败而导致其他请求的数据丢失。
例如,在 Vue 组件中使用 Promise.allSettled:

methods: {async fetchData() {try {const results = await Promise.allSettled([axios.get('/api/data1'),axios.get('/api/data2'),axios.get('/api/data3')]);results.forEach((result, index) => {if (result.status === 'fulfilled') {switch (index) {case 0:this.data1 = result.value.data;break;case 1:this.data2 = result.value.data;break;case 2:this.data3 = result.value.data;break;}} else {console.error(`Error fetching data for request ${index + 1}:`, result.reason);}});} catch (error) {console.error('Error fetching data:', error);}}
},
created() {this.fetchData();
}

通过这种方式,即使某个请求失败,其他请求的数据依然会被正确地处理。

这篇关于promise.all 和 promise.allSettled的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140173

相关文章

【JavaScript】异步操作:Promise对象

文章目录 1 概述2 Promise 对象的状态3 Promise 构造函数4 Promise.prototype.then()5 then() 用法辨析6 微任务 1 概述 Promise 对象是 JavaScript 的异步操作解决方案,为异步操作提供统一接口。它起到代理作用,充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口。 Promise 的设计思想是,

Promise的使用总结

Promise 是 JavaScript 中用于处理异步操作的一种机制。它提供了一种更清晰和更简洁的方式来处理异步代码,避免了回调地狱。以下是 Promise 的使用方法,包括创建 Promise、链式调用、错误处理、并行执行等。 1. 创建 Promise 你可以使用 new Promise 来创建一个新的 Promise 对象。Promise 构造函数接受一个执行函数,该函数有两个参数:r

Java多线程编程模式实战指南:Promise模式

文章来源: http://www.infoq.com/cn/articles/design-patterns-promise?utm_source=infoq&utm_campaign=user_page&utm_medium=link 文章代码地址: https://github.com/Viscent/JavaConcurrencyPattern/ 一、

Node.js 异步编程深度解析:回调函数、Promise 以及 async/await

Node.js 异步编程深度解析:回调函数、Promise 以及 async/await 目录 🔄 回调函数的基础与挑战💬 Promise 的使用与链式调用🚀 async/await 的简化与异常处理 🔄 回调函数的基础与挑战 回调函数的基本用法 回调函数是 Node.js 异步编程的基础,通过将函数作为参数传递给异步操作,可以在异步操作完成时执行特定的逻辑。回调函数的基

2024年最新版Ajax+Axios 学习【包含原理、Promise、报文、接口等...】

基础知识 AJAX概念 AJAX概念:是浏览器与服务器进行数据通信的技术。 认识URL 定义:统一资源定位符,简称网址,用于访问网络上的资源。 组成: http协议:超文本传输协议,规定浏览器和服务器之间传输数据的格式。域名:标记服务器在互联网中方位。资源位置:标记资源在服务器下的具体位置。 查询参数 定义:浏览器提供给服务器的额外信息,让服务器返回浏览器想要的数据。 语法:

Promise并发

Promise提供4个静态方法来处理并发情况 Promise.all() 在所有传入Promise都兑现时兑现,在任一Promise拒绝时拒绝。Promise.allSettle() 在所有传入Promise都敲定时兑现。Promise.any() 在任一Promise兑现时兑现,在所有Promise都拒绝时拒绝。Promise.race() 在任一Promise兑现时兑现,在任一Promise

Promise中使用reject和throw Error的异同点

在JavaScript的异步编程中,Promise 是一个非常重要的概念。它代表了异步操作的最终完成(或失败)及其结果值。在这篇文章中,我们将探讨Promise的几种状态,以及reject和throw Error的异同,最后讨论在Promise中使用reject后代码的执行情况。 1. Promise的几种状态 Promise 对象有三种状态,分别是: Pending(进行中):这是初始状态

es6系列教程 - promise常见用法详解

promise为es6引进的语言标准,为异步编程的一种解决方案; js实现异步:setTimeout promise 关于promise我在之前的文章已经应用过好几次,如[js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist,本文就来讲解下promise的常见用法. 为什么会有promise,他的作用是什么? pro

你所必须掌握的三种异步编程方法callbacks,listeners,promise

目录: 前言 Callbacks Listeners Promise 前言 coder都知道,javascript语言运行环境是单线程的,这意味着任何两行代码都不能同时运行。多任务同时进行时,实质上形成了一个队列,当队列中前一个事件结束时,才执行下一个事件。 如果队列中任何一个事务费时太长,则会造成浏览器假死,阻塞其他事务正常进行,影响用户体验。 js中将任务执行分为同步模式和异步模式,上面一种

std::future和std::promise详解(原理、应用、源码)

在编程实践中,我们常常需要使用异步调用。通过异步调用,我们可以将一些耗时、阻塞的任务交给其他线程来执行,从而保证当前线程的快速响应能力。还有一些场景可以通过将一个任务,分成多个部分然后将这部分交给多个线程来进行并发执行,从而完成任务的快速计算执行,提高应用性能。这里就需要用到异步调用的概念 异步调用,就是当前线程将一个任务交给另外一个线程来进行执行,当前线程会接着执行当前任务,不需要等待这个交付