Promise 是现代前端开发中常用的异步编程工具,它可以让我们更清晰地处理异步逻辑。然而,在实际使用中,我们经常需要对 Promise 的状态进行判断,并在不同的状态下执行不同的逻辑。而在过去的版本中,Promise 并不提供方便地方式来进行这些判断。在 ES7 中,Promise 新增了一个新的方法,就是 finally
方法。
Promise.prototype.finally 方法
finally
方法接受一个回调函数作为参数,在 Promise 成功或失败后,无论怎样,它都会被调用。这个方法的主要作用是让我们能够在异步操作结束后执行需要做的清理操作,比如释放资源或者更新状态。
------- -------- -- - -- -------- -- --------- -- - -- -------- -- ----------- -- - -- ---------------- ---
finally 方法的错误处理
通常情况下,我们在 catch
方法中处理 Promise 的错误。但是在某些情况下,Promise 的错误可能没有被正确地处理,例如 catch
方法中再次抛出了错误,这个错误就会无法被捕获。在这种情况下,我们需要使用 finally
方法来正确地处理错误。
------- -------- -- - -- -------- -- ------------ -- - ----------------- ----- --- ---------------- ---- --------- -- ----------- -- - -- ---------------- ---
在这个示例代码中,如果 Promise 中的错误在 catch
方法中被抛出,那么这个错误将无法被处理。在这种情况下,我们可以在 finally
方法中捕获错误,然后再次抛出,以确保错误得到处理。
最佳实践
在使用 finally
方法时,我们需要清楚它只是一个回调函数,并不能改变 Promise 的状态。因此,我们应该在 finally
方法中执行一些清理操作,而不是修改 Promise 的状态。在一个长时间运行的操作中,如从服务器加载大量数据,我们应该在 finally
方法中展示一个加载动画或进度条,以使用户知道仍在等待加载。
----------------------- -------------------------- -- - -- -------- -------------- -- - -- -------- ------------- -- - ----------------------- ---
在这个示例代码中,当我们向服务器发出请求时,我们展示了一个加载指示器,然后在 finally
方法中隐藏它,以确保不会一直显示在页面上。
结论
Promise.prototype.finally 方法是一个有用的工具,能够让我们更好地处理异步逻辑,它提供了一个方便的方法来在异步操作结束后执行一些操作,无论成功或失败。而且,它还能够帮助我们正确地处理 Promise 的错误,并在操作完成后清理一些资源,更好地优化我们的页面和用户体验。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670f11095f5512810262cf6d