什么是 Promise 对象
Promise 是 ES6 中新增的一种处理异步操作的方式,它可以将异步操作封装成一个对象,使得代码更加清晰可读,并且可以更好地处理异步操作中的错误。
Promise 对象有三种状态:
- pending(进行中)
- fulfilled(已成功)
- rejected(已失败)
当异步操作成功时,Promise 对象的状态会从 pending 变为 fulfilled,并且会执行 then 方法中的回调函数;当异步操作失败时,Promise 对象的状态会从 pending 变为 rejected,并且会执行 catch 方法中的回调函数。
Promise 对象的错误处理
在使用 Promise 对象时,我们需要注意错误处理。如果异步操作出现错误,我们需要在 catch 方法中处理。下面是一个简单的示例:
-- -------------------- ---- -------
--- ----------------- ------- -- -
------------- -- -
---------- ---------------- ---- ---------
-- ------
-------------- -- -
--------------------
-------------- -- -
---------------------
---在上面的示例中,我们使用 Promise 对象封装了一个异步操作。在 setTimeout 函数中,我们故意抛出了一个错误。当 Promise 对象的状态变为 rejected 时,我们会在 catch 方法中捕获错误并打印出来。
Promise 对象的常用方法
除了 then 和 catch 方法外,Promise 对象还有很多其他常用的方法,下面我们将逐一介绍。
Promise.all
Promise.all 方法用于将多个 Promise 对象包装成一个新的 Promise 对象,当所有的 Promise 对象都成功时,新的 Promise 对象的状态才会变为 fulfilled,并且返回所有 Promise 对象的结果;当任意一个 Promise 对象失败时,新的 Promise 对象的状态就会变为 rejected,并且返回第一个失败的 Promise 对象的错误信息。
下面是一个示例:
const promise1 = new Promise(resolve => setTimeout(() => resolve('result1'), 1000));
const promise2 = new Promise(resolve => setTimeout(() => resolve('result2'), 2000));
const promise3 = new Promise((resolve, reject) => setTimeout(() => reject(new Error('something went wrong')), 3000));
Promise.all([promise1, promise2, promise3])
.then(results => console.log(results))
.catch(error => console.error(error));在上面的示例中,我们使用 Promise.all 方法将三个 Promise 对象包装成一个新的 Promise 对象,并且在 then 方法中打印出所有 Promise 对象的结果。由于第三个 Promise 对象失败了,因此新的 Promise 对象的状态变为了 rejected,并且返回了第三个 Promise 对象的错误信息。
Promise.race
Promise.race 方法用于将多个 Promise 对象包装成一个新的 Promise 对象,当任意一个 Promise 对象成功或失败时,新的 Promise 对象的状态就会变为相应的状态,并且返回相应的结果或错误信息。
下面是一个示例:
const promise1 = new Promise(resolve => setTimeout(() => resolve('result1'), 1000));
const promise2 = new Promise(resolve => setTimeout(() => resolve('result2'), 2000));
const promise3 = new Promise((resolve, reject) => setTimeout(() => reject(new Error('something went wrong')), 3000));
Promise.race([promise1, promise2, promise3])
.then(result => console.log(result))
.catch(error => console.error(error));在上面的示例中,我们使用 Promise.race 方法将三个 Promise 对象包装成一个新的 Promise 对象,并且在 then 方法中打印出第一个成功的 Promise 对象的结果。由于第三个 Promise 对象失败了,因此新的 Promise 对象的状态变为了 rejected,并且返回了第三个 Promise 对象的错误信息。
Promise.resolve 和 Promise.reject
Promise.resolve 方法用于将一个普通的值或一个 Promise 对象包装成一个新的 Promise 对象,并且将新的 Promise 对象的状态变为 fulfilled。Promise.reject 方法用于将一个错误信息包装成一个新的 Promise 对象,并且将新的 Promise 对象的状态变为 rejected。
下面是一个示例:
Promise.resolve('result')
.then(result => console.log(result));
Promise.reject(new Error('something went wrong'))
.catch(error => console.error(error));在上面的示例中,我们分别使用 Promise.resolve 和 Promise.reject 方法创建了两个 Promise 对象,并且在 then 方法中打印出了 Promise.resolve 方法返回的结果,在 catch 方法中打印出了 Promise.reject 方法返回的错误信息。
结语
在使用 Promise 对象时,我们需要注意错误处理,并且熟练掌握 Promise 对象的常用方法,才能更好地处理异步操作中的错误,并且写出更加优雅和高效的代码。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67d28d42a941bf71344d4525