1. Promise.all:全成功才返回
Promise.all()中的Promise序列会全部执行通过才认为是成功,否则认为是失败
const promise1 = fetch('/api/data1');
const promise2 = fetch('/api/data2');
const promise3 = fetch('/api/data3');
Promise.all([promise1, promise2, promise3])
.then(responses => {
// 处理所有响应
})
.catch(error => {
// 处理错误
});
2. Promise.allSettled:不抛弃不放弃
Promise.allSettled()中的所有Promise完成,无论成功与否。
// 批量提交日志(允许部分失败)
const logPromises = logs.map(log => sendLog(log));
Promise.allSettled(logPromises)
.then(results => {
results.filter(r => r.status === 'rejected')
.forEach(err => recordError(err));
});
3. Promise.race:速度优先原则
Promise.race()中的Promise序列中第一个执行完毕的是通过,则认为成功,如果第一个执行完毕的Promise是拒绝,则认为失败;
const timeout = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('Timeout'));
}, 3000);
});
Promise.race([fetch('/user'), timeout])
.then(response => {
console.log(response);
})
.catch(error => {
console.error(error);
});
4. Promise.any:只要一个成功
Promise.any()中的Promise序列只要有一个执行通过,则认为成功,如果全部拒绝,则认为失败;
// 多CDN资源加载
const cdnPromises = CDN_URLS.map(url => loadScript(url));
Promise.any(cdnPromises)
.then(() => initApp())
.catch(() => fallbackToLocal());