有没有什么情况不能用Promise,必须用Deferred?

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

我理解 stylistic/clarity 人们可能更喜欢一种方法而不是另一种方法,但我想了解是否存在您不能 使用的情况Promise 并且 必须 使用 Deferred。作为参考,我使用的是 Q javascript library 但我认为它适用于任何其他库和语言。我不相信 "Deferreds are cool because..." 下的解释实际上描述了一种情况,即不可能通过简单的 q.Promise() 调用实现同样的事情(因此你必须使用 Deferred)但是我想检查一下是否正确。

推迟只是为了消除 "pyramid of doom" 还是还有更多?

This question 很有趣,但并没有真正解决这个特定问题。

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

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

promise 构造函数的优势在于它抛出安全,即 - 同步抛出被转换为拒绝,从而避免细微错误。

无论哪种情况,构造都应该是used only rarely。 Q 也是一个相当古老的图书馆,考虑一些更新和更现代的图书馆。