在 ES9(ECMAScript 2018)中,Promise 增加了一个新的方法 finally
。这个方法可以在 Promise 结束时,无论是 resolve 还是 reject,都会被执行。本文将详细介绍 finally
方法的使用方法,以及它的深度和学习以及指导意义。
语法
finally
方法的语法如下:
promise.finally(onFinally)
其中,promise
是一个 Promise 对象,onFinally
是一个回调函数,它会在 Promise 结束时被调用,无论是 resolve 还是 reject。onFinally
函数不接收任何参数,它只会返回一个新的 Promise 对象,该对象的状态和值与原来的 Promise 对象保持一致。
示例
下面是一个简单的示例,展示了 finally
方法的基本用法:
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - ---------------- -- ------ --- ------- ------------ -- - -------------------- -- ------------ -- - --------------------- -- ----------- -- - ----------------------- ---
在上面的示例中,我们创建了一个 Promise 对象,并在 1 秒钟后 resolve 它。然后,我们通过 then
方法处理 resolve 的结果,通过 catch
方法处理 reject 的结果,最后使用 finally
方法,无论 Promise 结束时的状态,都会输出一条信息。
深度和学习
1. finally
方法的返回值
finally
方法返回一个新的 Promise 对象,该对象的状态和值与原来的 Promise 对象保持一致。也就是说,如果原来的 Promise 对象是 resolve 状态,那么新的 Promise 对象也是 resolve 状态,并且它的值与原来的 Promise 对象的值相同;如果原来的 Promise 对象是 reject 状态,那么新的 Promise 对象也是 reject 状态,并且它的值与原来的 Promise 对象的值相同。
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - ---------------- -- ------ --- ----- ---------- - ------------------ -- - ----------------------- --- ---------------------- -- - -------------------- -------------- -- - --------------------- ---
在上面的示例中,我们使用 finally
方法创建了一个新的 Promise 对象 newPromise
,并在 then
方法中输出了它的结果。由于原来的 Promise 对象是 resolve 状态,所以 newPromise
也是 resolve 状态,并且它的值与原来的 Promise 对象的值相同。输出结果为:
finally done
2. finally
方法的链式调用
finally
方法可以与其他 Promise 方法一起链式调用,例如 then
方法和 catch
方法。在链式调用中,finally
方法总是最后被调用。
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - ---------------- -- ------ --- ------- ------------ -- - -------------------- -- ------------ -- - --------------------- -- ----------- -- - ----------------------- -- -------- -- - -------------------- ---
在上面的示例中,我们使用 finally
方法和 then
方法一起链式调用,输出结果为:
done finally then
3. finally
方法的多次调用
finally
方法可以被多次调用,每次调用都会返回一个新的 Promise 对象。
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - ---------------- -- ------ --- ------------------ -- - ------------------------ ------------- -- - ------------------------ ------------- -- - ------------------------ ---
在上面的示例中,我们多次调用 finally
方法,每次调用都会输出一条信息。输出结果为:
finally1 finally2 finally3
指导意义
finally
方法的出现,为 Promise 增加了一个重要的特性,使得开发者可以更加方便地处理 Promise 的结束状态。在实际开发中,我们可以使用 finally
方法来进行一些清理工作,例如关闭数据库连接、关闭文件句柄等等。此外,我们还可以使用 finally
方法来进行一些状态转换,例如将 Promise 转换为 Observable。
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - ---------------- -- ------ --- ----- ---------- - -------------------------------------- -- - ----------------------- --- --------------------------- -- - -------------------- ---
在上面的示例中,我们将 Promise 对象转换为 Observable,然后使用 finally
方法来输出一条信息。输出结果为:
done finally
结论
finally
方法是 ES9 中 Promise 的一个新方法,它可以在 Promise 结束时被调用,无论是 resolve 还是 reject。finally
方法的返回值是一个新的 Promise 对象,该对象的状态和值与原来的 Promise 对象保持一致。在实际开发中,我们可以使用 finally
方法来进行一些清理工作,或者将 Promise 转换为其他类型的对象。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674196deed0ec550d7211d46