什么是 Promise?
Promise 是 JavaScript 中一种特殊的对象,它表示一个异步操作的最终结果。Promise 有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。
Promise.all
Promise.all
是一个比较常用的用于并行处理多个异步操作的方法,它接收一个 Promise 数组作为参数,只有当所有 Promise 都执行成功后才会返回成功的结果。
使用方式
Promise.all([promise1, promise2, promise3]) .then(([result1, result2, result3]) => { // do something with results }) .catch(error => { // handle error });
在上述代码中,我们可以看到,当所有传入的 Promise 对象都成功 resolve 后,会以一个数组作为参数来调用 Promise.all
的 then
方法。
如果传入的 Promise 数组中有一个 fail,Promise.all
则会直接返回 reject 并传递该 promise fail 的原因。
示例代码
-- -------------------- ---- ------- ----- -------- - --- ----------------- ------- -- - ------------- -- - ------------------- -- ------ --- ----- -------- - --- ----------------- ------- -- - ------------- -- - ------------------- -- ------ --- ----- -------- - --- ----------------- ------- -- - ------------- -- - ------------------- -- ------ --- ---------------------- --------- ---------- ---------------- -------- --------- -- - --------------------- --------------------- --------------------- -- ------------ -- - ------------------- ----------- ---
上述代码中,我们创建了三个 Promise 对象,每个对象的 resolve 时间间隔分别为 1 秒、2 秒、3 秒。强制使用 Promise.all
并行执行三个 Promise 对象并打印出三个结果 result1
、result2
、result3
。
Promise.race
Promise.race
方法与 Promise.all
类似,只不过在任意 Promise 对象 resolve 或 reject 后马上返回结果。
使用方式
Promise.race([promise1, promise2, promise3]) .then(result => { // do something with result }) .catch(error => { // handle error });
在上述代码中,当 Promise 数组中的任意一个 Promise 对象 resolve 或 reject 后,就会以相应的结果调用 Promise.race
的 then
或 catch
方法。
示例代码
-- -------------------- ---- ------- ----- -------- - --- ----------------- ------- -- - ------------- -- - ------------------- -- ------ --- ----- -------- - --- ----------------- ------- -- - ------------- -- - ------------------- -- ----- --- ----- -------- - --- ----------------- ------- -- - ------------- -- - ------------------- -- ------ --- ----------------------- --------- ---------- ------------ -- - -------------------- ------------ -- ------------ -- - ------------------- ----------- ---
在上述代码中,我们创建了三个 Promise 对象,每个对象的 resolve 时间间隔分别为 1 秒、500 毫秒、3 秒。我们强制使用 Promise.race
只返回最快 resolve 的 Promise 对象,并打印出结果 result2
。
总结
Promise.all
方法用于并行处理多个异步操作并等待所有 Promise 对象 resolve,之后再返回所有结果。
Promise.race
方法用于并行处理多个异步操作,当任意一个 Promise 对象 resolve 或 reject 后,就会返回该 Promise 对象相应的结果。
我们在原生 JavaScript 中使用这些方法来优化我们的异步调用,提高应用程序的响应速度和性能。
希望本文能够对你理解 Promise.all
和 Promise.race
的区别和用法有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e56b45f6b2d6eab30da07f