Promise 是一个新的异步编程解决方案,它避免了回调地狱,并且使得异步操作更加简单和直观。在 Promise 中,我们经常需要用到 Promise.all() 和 Promise.race() 这两个方法来操作异步任务。
Promise.all()
Promise.all() 方法接受一个 Promise 数组作为参数,返回一个新的 Promise。当传入的所有 Promise 都成功返回时,新的 Promise 才会成功,返回值是一个由所有 Promise 结果组成的数组。如果其中一个 Promise 失败,则新 Promise 失败,返回值是该 Promise 的错误信息。
Promise.all() 的一个比较典型的应用场景是在并行执行多个 Promise 实例时使用。比如我们需要向多个站点发送请求,然后在所有请求返回后进行下一步操作。下面是代码示例:
const promises = [fetch('/api/site1'), fetch('/api/site2'), fetch('/api/site3')]; Promise.all(promises).then(([response1, response2, response3]) => { // 代码执行到这里表示三个请求都已经结束 console.log(response1, response2, response3); }).catch((error) => { console.log(error); });
上面的代码中,我们使用 fetch 函数发送了三个 Ajax 请求,然后通过 Promise.all() 方法来等待三个请求全部结束,然后将全部结果合并为一个数组。这个数组中包含了所有请求返回的结果,按照请求顺序排列。
Promise.race()
Promise.race() 方法同样接受一个 Promise 数组作为参数,返回一个新的 Promise。和 Promise.all() 不同的是,Promise.race() 的返回结果取决于数组中第一个返回结果的 Promise 实例。无论这个 Promise 成功还是失败,新的 Promise 都结束。如果第一个返回结果的 Promise 实例失败,则新的 Promise 失败,返回该 Promise 的错误信息。
Promise.race() 的一个常见用途是在超时等待场景中。比如我们需要发送一个请求,等待 5 秒后如果没有返回结果,则认为请求失败。下面是代码示例:
-- -------------------- ---- ------- ----- -------------- - --- ----------------- ------- -- - ------------- -- - --------------- ---------- -- ------ --- ----- -------------- - ------------------- ----------------------------- ------------------------------ -- - -- ---- ---------------------- -------------- -- - -- ---- ------------------- ---
上面的代码中,我们通过 Promise.race() 方法来等待 5 秒钟或者发送请求成功后的第一个返回结果。如果在 5 秒之内请求成功,我们就打印出响应内容。如果 5 秒之内没有收到响应,我们就认为该请求已经失败。
总结
Promise.all() 和 Promise.race() 是 Promise 的两个重要方法,它们分别用于等待多个 Promise 实例同时返回和等待多个 Promise 实例中的第一个返回。这两个方法在实际应用中十分常用,特别是在进行 Ajax 请求时。学习 Promise.all() 和 Promise.race() 方法,对于我们更好的理解 Promise 所涉及的异步操作,提高编程效率具有非常重要的指导意义。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646daba6968c7c53b0c4fa31