我理解风格/清晰度的理由是人们可能更喜欢一种方法而不是另一种方法,但我试图理解是否有任何情况不能使用Promise而必须使用延期。作为参考,我使用的是Q javascript library,但我认为它适用于任何其他库和语言。我不相信“Deferreds很酷,因为......”的解释实际上描述了一个简单的q.Promise()
调用不可能实现相同的事情的情况(因此你必须使用{{1但是我想检查一下是否正确。
推迟仅仅是为了消除“厄运金字塔”还是更多它们呢?
This question很有意思,但并没有真正解决这个问题。
答案 0 :(得分:2)
不,没有这种情况。很容易证明你可以使用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也是一个非常古老的图书馆,考虑更新,更现代的东西。