代码之家  ›  专栏  ›  技术社区  ›  Tony Brasunas

如何在AngularJS中使用不带.then()的.finally()?

  •  1
  • Tony Brasunas  · 技术社区  · 7 年前

    $q

    我知道我可以:

    myPromise()
      .then((response) => {
         // Do my important stuff here
      })
      .catch((response) => {
         // Copy code from above
      })
    

    还有这个(稍微好一点):

    myPromise()
      .catch(() => {})
      .then((response) => {
        // Do my important stuff here, and only write it once
      })
    

    但我想写点东西:

    myPromise()
      .finally((response) => {
        // Do my important stuff here, only written once
      })
    

    .finally() 如果没有先处理解析/拒绝的then()或catch()块,则不会运行。

    0 回复  |  直到 6 年前
        1
  •  0
  •   Tony Brasunas    6 年前

    你可以这么做,但问题是 为什么? 而不是 怎样

    .finally() 即使没有也要跑 .then() .catch() 在它前面。但是这样做是一种反模式,正如Claies在问题下面的注释中提到的,因为您避免处理可能阻止代码运行的错误。

    另外,因为 最后() 不公开回应或提供新的承诺,它在实用性上不如其他两个。实际上,它只适用于有限的情况——运行不管promise的命运如何都应该执行的代码,例如清理设置为向应用程序其余部分指示promise尚未返回的变量。

    所以,尽管这不是一个完全没有意义的问题,但这并不是一个现实的场景——你想在哪里跑步 没有 。然后() .

    推荐文章