推荐答案
-- -------------------- ---- ------- ----- -------- - ------------------- ----- -------- - --- ----- -------- - --- ----------------- ------- -- - ------------------- ---- ------- --- ---------------------- --------- ------------------------ -- - -------------------- -- --- --- --- ------ ---
本题详细解读
1. 什么是 Promise.all
?
Promise.all
是 JavaScript 中的一个静态方法,它接受一个可迭代对象(通常是数组)作为参数,数组中的每个元素都是一个 Promise 对象。Promise.all
会等待所有的 Promise 对象都成功完成(即变为 fulfilled
状态),然后返回一个新的 Promise 对象,该 Promise 对象的结果是一个数组,数组中的每个元素对应传入的 Promise 对象的结果。
2. 如何使用 Promise.all
?
传入一个 Promise 数组:
Promise.all
接受一个 Promise 数组作为参数。数组中的每个元素可以是一个 Promise 对象,也可以是一个非 Promise 值(如数字、字符串等),这些非 Promise 值会被自动转换为已完成的 Promise。等待所有 Promise 完成:
Promise.all
会等待所有的 Promise 都完成(即变为fulfilled
状态)。如果其中任何一个 Promise 被拒绝(即变为rejected
状态),Promise.all
会立即返回一个被拒绝的 Promise,并且不会等待其他 Promise 完成。返回结果数组:如果所有的 Promise 都成功完成,
Promise.all
返回的 Promise 对象的结果是一个数组,数组中的每个元素对应传入的 Promise 对象的结果。
3. 示例代码解析
-- -------------------- ---- ------- ----- -------- - ------------------- ----- -------- - --- ----- -------- - --- ----------------- ------- -- - ------------------- ---- ------- --- ---------------------- --------- ------------------------ -- - -------------------- -- --- --- --- ------ ---
promise1
:这是一个已经完成的 Promise,结果为3
。promise2
:这是一个非 Promise 值42
,会被自动转换为一个已完成的 Promise。promise3
:这是一个延迟 100 毫秒后完成的 Promise,结果为'foo'
。
Promise.all
会等待所有的 Promise 完成,然后返回一个包含所有结果的数组 [3, 42, "foo"]
。
4. 错误处理
如果 Promise.all
中的任何一个 Promise 被拒绝,Promise.all
会立即返回一个被拒绝的 Promise,并且不会等待其他 Promise 完成。你可以使用 .catch
方法来处理错误:
Promise.all([promise1, promise2, promise3]) .then((values) => { console.log(values); }) .catch((error) => { console.error(error); });
5. 适用场景
Promise.all
适用于需要并行执行多个异步操作,并且需要等待所有操作都完成后再进行下一步处理的场景。例如,同时发起多个网络请求,并在所有请求都完成后处理返回的数据。