我仍然不清楚调用解析器的resolve()与fulfill()之间的区别?我看到函数和术语“解决一个承诺”和“履行一个承诺”都被反复提及。
我应该什么时候使用每个?
我仍然不清楚调用解析器的resolve()与fulfill()之间的区别?我看到函数和术语“解决一个承诺”和“履行一个承诺”都被反复提及。
我应该什么时候使用每个?
你应该使用resolve
. deferredPromise.resolve(nextPromise)
意味着任何等待的东西deferredPromise
现在都会等待nextPromise
。如果nextPromise
根本不是一个承诺,它就会变成一个已履行的承诺,继续通知任何等待它的东西该值已经可用。
该fulfill
方法是一个坏主意,将被弃用并最终完全消失。在所有有用的情况下在fulfill
语义上等价于。resolve
存在的唯一理由是它deferredPromise.fulfill(value)
比 更容易被人类解释deferredPromise.resolve(value)
,因为resolve
它被重载来处理nextPromise
和finalValue
。
存在的问题fulfill
在deferredPromise.fulfill(rejectedPromise)
语义上是自相矛盾的。
一般来说,解决意味着成功或失败。这就是触发then
动作调用的原因。对于任何给定的承诺,它只能发生一次。
完成意味着成功地“解决” 。这将触发then
操作中的成功回调。失败的“完成”对应的是拒绝。
从不同的角度来看,您可以将任何承诺在特定时间点的状态分类为“未解决”(有时也称为“未解决” )或“已解决”,而“已解决”具有“已完成”和“已拒绝”的子状态”。“已履行”状态的承诺具有价值,“已拒绝”状态的承诺具有原因。
每个 API 中用于表示这些概念的特定方法不同。不幸的是,有许多博客文章和文档混淆了这些术语,特别是当它们表示“解决”时使用“fullfill”,反之亦然。
我不是很了解Q,但看起来它的resolve
方法实际上实现了承诺(强调添加):
使用 non-promise 值调用 resolve 会导致 promise 用该值实现。
然而,不同的是,您也可以deferred.resolve
使用 Promise 进行调用,在这种情况下,第一个 Promise 或多或少假设了传入 Promise 的状态。例如,如果传入的 Promise 处于“待处理”状态,则该 Promise 将采用传递的 Promise 的待处理状态。这意味着一个命名的方法resolve
实际上并没有解决承诺的稍微奇怪的语义。