📅  最后修改于: 2023-12-03 15:10:06.360000             🧑  作者: Mango
Promise 是 Javascript 中的一种设计模式,用于异步操作的管理。它是一种代表未来结果的对象,可以简化复杂的异步逻辑。
一个 Promise 包括三种状态。
创建 Promise 可以通过 Promise 构造函数来实现,如下所示:
const promise = new Promise((resolve, reject) => {
// 异步操作
// 如果操作成功,可以使用 resolve 方法返回结果
// 如果操作失败,可以使用 reject 方法返回错误信息
});
使用 Promise 的一个显著的优势是可以进行链式调用。例如,我们需要依次执行三个异步操作,任意一个失败都会中断后续操作。使用 Promise 可以这样实现:
const promise = fetchData()
.then((data1) => process1(data1))
.then((data2) => process2(data2))
.then((data3) => process3(data3))
.catch((error) => handleError(error));
这个代码片段定义了一个 fetchData 方法,它返回一个 Promise 对象。接下来,每一个 then 方法都接收上一个 Promise 返回的结果作为参数,并返回一个新的 Promise 对象。
如果其中任何一个异步操作返回了错误,整个 Promise 链都会中断,并跳到 catch 方法中执行错误处理逻辑。
Promise.all 方法可以将多个 Promise 对象包装成一个新的 Promise 对象,等到所有 Promise 都成功完成后,才会触发新的 Promise 的 fulfilled 状态。如果其中任何一个 Promise 失败,则整个 Promise.all 直接进入 rejected 状态。
例如,我们有三个异步操作,需要等到它们全部完成才执行下一步操作。这个场景可以使用 Promise.all,如下所示:
const promises = [fetchData1(), fetchData2(), fetchData3()];
Promise.all(promises)
.then(([data1, data2, data3]) => processData(data1, data2, data3))
.catch((error) => handleError(error));
Promises 数组包含了三个 Promise,我们使用 Promise.all 方法将它们封装成一个新的 Promise。接下来的 then 方法接收一个包含了所有 Promise 返回结果的数组,我们可以使用数组解构将其拆分为三个变量:data1、data2 和 data3。
Promise.race 方法和 Promise.all 类似,都是将多个 Promise 对象包装成一个新的 Promise 对象。但不同的是,Promise.race 只等待最先结束的 Promise,无论成功或者失败。
例如,我们有两个异步操作,但我们只关心哪个先完成了。这个场景可以使用 Promise.race,如下所示:
const promises = [fetchData1(), fetchData2()];
Promise.race(promises)
.then((result) => processResult(result))
.catch((error) => handleError(error));
Promises 数组包含了两个 Promise,我们使用 Promise.race 方法将它们封装成一个新的 Promise。当任意一个 Promise 完成时,新的 Promise 便会 resolved,并调用 then 方法,我们可以使用 result 参数处理异步结果。
Promise 是一种管理异步操作的新的设计模式。Promise 包括三种状态、链式调用、Promise.all 和 Promise.race 等方法,可以更便捷地实现回调地狱等复杂异步逻辑。