有没有什么情况不能用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 也是一个相当古老的图书馆,考虑一些更新和更现代的图书馆。
我理解 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 也是一个相当古老的图书馆,考虑一些更新和更现代的图书馆。