推荐答案
-- -------------------- ---- ------- -- ----------- -- ----- -------- - ------------------- ----- -------- - --- ----- -------- - --- ----------------- ------- -- - ------------------- ---- ------- --- ---------------------- --------- ------------------------ -- - -------------------- -- --- --- ------ --- -- ------------ -- ----- -------- - --- ----------------- ------- -- - ------------------- ---- ------- --- ----- -------- - --- ----------------- ------- -- - ------------------- ---- ------- --- ----------------------- ----------------------- -- - ------------------- -- ----- ---
本题详细解读
Promise.all
Promise.all
方法接收一个包含多个 Promise 对象的数组作为参数,并返回一个新的 Promise 对象。这个新的 Promise 对象在所有传入的 Promise 对象都成功解决(resolved)时才会被解决。如果其中任何一个 Promise 被拒绝(rejected),则整个 Promise.all
返回的 Promise 对象会立即被拒绝。
- 成功情况:当所有 Promise 都成功解决时,
Promise.all
返回的 Promise 对象会以一个包含所有 Promise 解决值的数组作为解决值。 - 失败情况:如果任何一个 Promise 被拒绝,
Promise.all
返回的 Promise 对象会立即被拒绝,并且拒绝原因与第一个被拒绝的 Promise 相同。
Promise.race
Promise.race
方法同样接收一个包含多个 Promise 对象的数组作为参数,并返回一个新的 Promise 对象。这个新的 Promise 对象会在传入的 Promise 对象中有一个率先解决(无论是成功还是失败)时被解决。
- 解决情况:
Promise.race
返回的 Promise 对象会以第一个解决(无论是成功还是失败)的 Promise 的解决值或拒绝原因作为自己的解决值或拒绝原因。
使用场景
- Promise.all:适用于需要等待多个异步操作全部完成后再进行下一步操作的场景。例如,同时发起多个 API 请求,并在所有请求都返回结果后再进行处理。
- Promise.race:适用于需要从多个异步操作中获取最快响应的场景。例如,设置一个超时机制,如果某个操作在指定时间内没有完成,则使用另一个操作的结果。
注意事项
Promise.all
和Promise.race
都接受一个可迭代对象(如数组)作为参数,但通常使用数组。- 如果传入的数组为空,
Promise.all
会立即解决为一个空数组,而Promise.race
会永远挂起,不会解决或拒绝。