then()
:
返回值 立即返回一个新的 Promise。 无论当前承诺的状态如何,这个新承诺在返回时总是待处理。
catch()
:
返回值 返回一个新的 Promise。 无论当前承诺的状态如何,这个新承诺在返回时始终处于待处理状态。如果 onRejected 抛出错误或返回本身被拒绝的 Promise,它最终会被拒绝;否则,它最终会实现。
finally()
:
像 catch() 一样,finally() 在内部调用被调用对象的 then 方法。如果 onFinally 不是函数,则调用 then() 时将 onFinally 作为两个参数——这对于 Promise.prototype.then() 来说意味着没有附加有用的处理程序。否则,then() 将使用两个内部创建的函数调用,其行为如下:
MDN文档说,
then()
和catch()
返回的promise一开始总是处于pending状态。
据我了解,这是因为那些方法本身是同步执行的,但是它们的回调是异步执行的。 此类回调对于了解承诺是否将被 resolved 或 rejected 是必要的,并且由于这些稍后执行,此类方法返回的承诺将是 unresolved,因此 pending 直到此类回调被执行。
https://tc39.es/ecma262/#sec-promise-objects
如果承诺已解决或已“锁定”,则承诺已解决 匹配另一个承诺的状态。试图解决或拒绝 已解决的承诺无效。如果不是,则承诺未解决 解决。 未解决的承诺总是处于未决状态。 A 已解决的承诺可能是未决的、已履行的或已拒绝的。
finally()
是否同样适用?catch()
, finally()
和 then()
自己运行 synchronously?我的3个问题只是为了了解pending status指的是什么
你的理解基本正确。让我们分解一下:
总的来说,你对这些Promise方法的理解是正确的。它们提供了一种方法来安排回调以响应 Promise 的解决或拒绝而运行,并且它们返回一个允许链接的新 Promise。这些方法返回的 Promise 最初始终处于挂起状态,因为回调是异步运行的。