>[danger]promise.all和promise.race,如何处理报错? 在 Promise.all 方法中,只要有一个 Promise 被 reject,Promise.all 就会立即结束并返回一个 rejected 状态的 Promise,同时丢弃其余未完成的 Promise。如果需要处理所有 Promise 的错误,可以在 Promise.all 返回的 Promise 上使用 catch 方法或者在每个 Promise 对象上都使用 catch 方法来捕获可能发生的错误。 例如: ```javascript const promises = [Promise.resolve(1), Promise.reject(new Error('Failed')), Promise.resolve(3)]; Promise.all(promises) .then(results => { console.log('All promises resolved: ', results); }) .catch(error => { console.error('At least one promise rejected: ', error); }); ``` 在 Promise.race 方法中,只要有一个 Promise 被 settle(resolved 或 rejected),Promise.race 就会立即结束并返回一个与 settle 状态相同的 Promise,同时丢弃其余未完成的 Promise。如果需要处理 settle 后的结果或错误,同样可以在 Promise.race 返回的 Promise 上使用 then 和 catch 方法来处理。 例如: ```javascript const promises = [ new Promise((resolve, reject) => setTimeout(() => resolve('Done after 2s'), 2000)), new Promise((resolve, reject) => setTimeout(() => reject(new Error('Failed after 1s')), 1000)), new Promise((resolve, reject) => setTimeout(() => resolve('Done after 3s'), 3000)) ]; Promise.race(promises) .then(result => { console.log(result); }) .catch(error => { console.error(error); }); ``` 需要注意的是,在 Promise.all 和 Promise.race 中,如果数组中没有任何 Promise,Promise.all 和 Promise.race 都会立即返回一个 resolved 状态的 Promise。此外,在 Promise.race 中,如果数组中所有 Promise 都被丢弃了(例如因为数组为空或者所有 Promise 都已经被 settle),Promise.race 也会立即返回一个 settled 状态的 Promise。