Javascript q、 js:resolve()和fulfill()之间的区别

Javascript q、 js:resolve()和fulfill()之间的区别,javascript,asynchronous,promise,q,Javascript,Asynchronous,Promise,Q,我仍然不清楚调用解析器的resolve()和fulfill()之间的区别?我看到“解决承诺”和“履行承诺”这两个词的功能和术语被大量使用 我应该在什么时候使用它们?一般来说,解决意味着要么成功,要么失败。这就是触发调用然后操作的原因。对于任何给定的承诺,它可能只发生一次 履行表示成功“解决”。这将触发操作中的成功回调,然后操作。失败的“完成”对应项为拒绝 从另一个角度来看,您可以将某个特定时间点的任何承诺的状态分类为“未解决”(有时也称为“待定”)或“已解决”,而“已解决”的子状态为“已履行”和

我仍然不清楚调用解析器的resolve()和fulfill()之间的区别?我看到“解决承诺”和“履行承诺”这两个词的功能和术语被大量使用


我应该在什么时候使用它们?

一般来说,解决意味着要么成功,要么失败。这就是触发调用
然后
操作的原因。对于任何给定的承诺,它可能只发生一次

履行表示成功“解决”。这将触发
操作中的成功回调,然后
操作。失败的“完成”对应项为拒绝

从另一个角度来看,您可以将某个特定时间点的任何承诺的状态分类为“未解决”(有时也称为“待定”)或“已解决”,而“已解决”的子状态为“已履行”和“已拒绝”。处于“履行”状态的承诺具有,而处于“拒绝”状态的承诺具有原因

每个API中用于表示这些概念的特定方法各不相同。不幸的是,有许多博客文章和文档混淆了这些术语,特别是当它们的意思是“解决”时使用了“fullfill”,反之亦然

Q 我不太了解Q,但它的
resolve
方法似乎确实实现了承诺(重点补充):

使用非承诺值调用resolve会导致承诺无效 实现了该值


然而,问题在于,您还可以使用承诺调用
deferred.resolve
,在这种情况下,第一个承诺或多或少地假设传入的承诺的状态。例如,如果传入的承诺处于“挂起”状态,则该承诺采用已传入承诺的挂起状态。这意味着有点奇怪的语义,即名为
resolve
的方法实际上并没有解析承诺。

您应该使用
resolve
deferredPromise.resolve(nextPromise)
意味着等待
deferredPromise
的任何东西现在都将等待
nextPromise
。如果
nextPromise
根本不是一个承诺,那么它就会变成一个已履行的承诺,并通知等待它的任何人该值已经可用

fulfill
方法是一个坏主意,它将被弃用并最终完全消失<在所有有用的情况下,code>fulfill在语义上等同于
resolve
。它存在的唯一原因是
delferredpromise.fulfill(value)
delferredpromise.resolve(value)
更容易解释,因为
resolve
被重载以处理
nextPromise
finalValue


fulfill
存在的问题是
delferredpromise.fulfill(rejectedPromise)
在语义上是矛盾的。

我在
q
文档中没有看到
fulfill
方法。还可以看到,每个人和他的狗都在交替使用决心和满足。在我看来,解决意味着不再等待。e、 承诺得到了成功的实现。。或者承诺被错误地解决了;或者这个承诺被解决了,还有另一个承诺……除非我们允许嵌套的承诺——语义上是纯的:)@Bergi,对此有很多讨论,但是
resolve
不需要改变。有人说要把强制变成
,然后是
(和其他),并用
平面地图
来展开严格的一元承诺。我喜欢你的解释。您是对的,不同的API实现为
resolve
fulfill
选择了不同的含义,这确实令人困惑。