ale*_*ecf 15 javascript asynchronous promise q
我还不清楚调用解析器的resolve()和fulfill()之间的区别?我看到了很多功能和术语"解决承诺"和"履行承诺".
我什么时候应该使用它们?
Kri*_*wal 17
你应该用resolve.deferredPromise.resolve(nextPromise)意味着等待的任何东西deferredPromise现在都在等待nextPromise.如果nextPromise不是一个承诺,它就会变成一个履行的承诺,继续通知任何等待价值变得可用的东西.
这个fulfill方法是一个坏主意,将被弃用并最终完全消失.fulfill在语义上等同resolve于所有有用的情况.存在的唯一理由是deferredPromise.fulfill(value)人类更容易解释deferredPromise.resolve(value),因为resolve超载来处理两者nextPromise和finalValue.
这个问题fulfill存在的根本是,deferredPromise.fulfill(rejectedPromise)在语义上自相矛盾.
小智 15
通常,解决意味着成功或失败.这就是触发then动作调用的原因.对于任何给定的承诺,它可能恰好发生一次.
实现成功 "解决"的手段.这将触发操作中的成功回调then."履行"失败的对应物是拒绝.
从不同的角度来看,您可以将特定时间点的任何承诺的状态分类为"未解决"(有时也称为待定)或"已解决","已解决"具有"已履行"和"已拒绝"的子状态"."履行"状态的承诺具有价值,"拒绝"状态的承诺具有原因.
用于表示这些概念的每个API中的特定方法不同.不幸的是,有许多博客文章和文档混淆了这些术语,特别是当他们的意思是"解决"时使用"fullfill",反之亦然.
我不太了解Q,但似乎它的resolve方法实际上履行了承诺(强调添加):
使用非承诺值调用resolve会导致使用该值履行承诺 .
然而,扭曲是你也可以deferred.resolve用一个承诺来调用,在这种情况下,第一个承诺或多或少地假设传入的承诺的状态.例如,如果传入的promise处于"pending"状态,则promise将采用传递的promise的pending状态.这意味着一个稍微奇怪的语义,一个命名的方法resolve实际上不解决这个承诺.
| 归档时间: |
|
| 查看次数: |
10090 次 |
| 最近记录: |