介绍一下 promise?Promise.all和Promise.race的区别的使用场景?
时间: 2023-12-21 15:31:27 浏览: 319
Promise是JavaScript中处理异步操作的一种机制。它是一种代表了异步操作最终完成或失败的对象。Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。当一个Promise对象的状态从pending变为fulfilled或rejected时,会触发相应的回调函数。
Promise.all和Promise.race是Promise的两个静态方法,用于处理多个Promise对象。
1. Promise.all:接收一个Promise对象的可迭代参数,返回一个新的Promise对象。当所有的Promise对象都变为fulfilled状态时,新的Promise对象才会变为fulfilled状态,并返回一个包含所有Promise结果的数组。如果其中一个Promise对象变为rejected状态,新的Promise对象会立即变为rejected状态,并返回第一个被rejected的Promise对象的结果。
2. Promise.race:接收一个Promise对象的可迭代参数,返回一个新的Promise对象。当其中一个Promise对象变为fulfilled或rejected状态时,新的Promise对象会立即变为相同的状态,并返回第一个完成的Promise对象的结果。
使用场景:
- Promise.all适用于需要等待多个异步操作全部完成后再进行下一步操作的情况,例如同时发送多个请求并等待所有请求完成后再进行数据处理。
- Promise.race适用于需要获取最快完成的异步操作结果的情况,例如多个请求同时发送,只需要获取最先返回的结果。
范例:
```javascript
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 1 resolved');
}, 2000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 2 resolved');
}, 1000);
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('Promise 3 rejected');
}, 1500);
});
Promise.all([promise1, promise2])
.then(results => {
console.log(results); // 输出:['Promise 1 resolved', 'Promise 2 resolved']
})
.catch(error => {
console.log(error);
});
Promise.race([promise1, promise2, promise3])
.then(result => {
console.log(result); // 输出:'Promise 2 resolved'
})
.catch(error => {
console.log(error); // 输出:'Promise 3 rejected'
});
```
阅读全文