必知必会的4种原生Promise并发控制

187 阅读1分钟

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());