是否存在无法使用承诺而必须使用延期的情况

Is there any situation where it is impossible to use a Promise and a Deferred must be used?

本文关键字:情况 承诺 存在 是否      更新时间:2023-09-26

基于风格/清晰度的原因,我理解人们可能更喜欢一种方法而不是另一种方法,但我正在努力理解是否存在任何情况,即您不能使用Promise,而必须使用Deferred。作为参考,我使用的是Q javascript库,但我认为它适用于任何其他库和语言。我不相信"失败很酷,因为…"下面的解释实际上描述了一种情况,即不可能通过简单的q.Promise()调用(因此必须使用Deferred)来实现相同的事情,但我想检查一下这是正确的。

延期仅仅是为了消除"末日金字塔",还是还有更多延期?

这个问题很有趣,但并不能真正解决这个特殊的问题。

不,没有这种情况。通过显示它们之间的翻译,很容易证明你可以用promise构造函数做任何你想做的事情,而不使用deferred:

 var deferred = {};
 var p = new Q.Promise((resolve, reject){ // always runs sync
     deferred.resolve = resolve;
     deferred.reject = reject;
 });
 deferred.promise = p;

promise构造函数的优点是它是抛出安全的,也就是说,同步抛出被转换为拒绝,这使您免受细微错误的影响。

在任何一种情况下,结构都应该很少使用。Q也是一个相当古老的图书馆,想想更新更现代的吧。