什么是 Promise?
Promise 是 JavaScript 中的一种对象,用来表示一个异步操作的最终完成(或失败)及其结果值。在使用 Promise 的过程中,一个 Promise 可以处于以下三种状态中的一种:
- Pending(进行中):表示 Promise 实例创建后,但它的最终结果还不清楚的状态;
- Fulfilled(已成功):表示 Promise 一步操作成功完成;
- Rejected(已失败):表示 Promise 一步操作失败。
Promise 的优势
使用 Promise 的好处在于它允许我们更好地处理异步代码,尤其是处理类似于 ajax 调用、图片加载等耗时操作。
在传统回调函数中,异步操作会由回调函数处理。Promise 通过将异步操作的状态抽象为一个对象,使得异步调用更加直观和易于维护。
Promise 的基本用法
创建 Promise 实例
可以使用实例化 Promise 构造函数,其构造函数有一个函数参数(也称“执行函数”),该函数参数还有两个函数参数(resolve,reject):
const promise = new Promise((resolve, reject) => { // 进行异步操作 });
Promise 实例化的状态
当 Promise 实例化时,会开始进行对应的异步操作。Promise 的三种状态中的一种就是这个实例化操作的结果。Promise 的三种状态为:
- 进行中(Pending):这个异步操作正在进行中,不能确定其最终结果。
- 已成功(Fulfilled):异步操作已成功,Promise 対应完成。
- 已失败(Rejected):异步操作已失败。
例如:
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ----- ---- - ------------- - ----- ------------- -- - -- ----- - ----- - -------------- - ---- - ------------- - -- ------ ---
Promise 实例化的状态改变
Promise 实例化的状态只有两种改变可能性:
当 Promise 实例执行函数中的异步操作成功时,调用 resolve 函数,并且将其结果传递给回调函数。Promise 实例化状态从进行中(Pending)改变为已成功 (Fulfilled)。
当 Promise 实例执行函数中的异步操作失败时,调用 reject 函数。Promise 实例化状态从进行中(Pending)改变为已失败(Rejected)。
promise.then( (value) => console.log(value), (error) => console.log(`错误信息: ${error}`) );
Promise.then 方法
当 Promise 实例的状态变为已成功(Fulfilled)时,可以通过 then 方法获取异步操作的结果。then() 方法可以接受两个回调函数参数:
- 第一个回调函数是异步操作成功时所执行的处理函数;
- 第二个回调函数是异步操作失败时所执行的处理函数。
重要的注意事项
状态不可变
Promise 的一旦状态被改变,就不可以再次修改了。一个成功的 Promise 不能再次成为失败的 Promise,反之亦然。一旦状态被修改,所有的 Promise 会立即调用相应的回调函数,不管 Promise 实例现在的状态与回调函数相符合还是不相符。
Promise 链
在 Promise 中,常常遇到 Promise 链的用法,也就是将多个 Promise 实例化链接在一起。
-- -------------------- ---- ------- ----- -------- - --- ----------------- ------- -- - ----- ---- - ------------- - - - -- ------------- -- - -- ----- - -- - ------------- - ---- - --------------------------- - -- ------ --- ----- -------- - --- ----------------- ------- -- - -------- -------------- -- - -------------------- ----- ---- - ------------- - - - -- ------------- -- - -- ----- - -- - ------------- - ---- - -------------------------- - -- ------ -- -------------- -- - ------------------- --- --- ----- -------- - --- ----------------- ------- -- - -------- -------------- -- - -------------------- --------------- -- -------------- -- - ------------------- --- ---
结论
本篇文章对 Promise 的意义与具体的实现方式进行了详细介绍,希望读者们可以上手试试,并且能在实践中发现更多的问题。如果你在面试中遇到了 Promise 的问题,希望可以通过本文所提供的技能点去解决问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/676ffd9ce9a7045d0d78f9eb