是否存在无法使用Promise并且必须使用Deferred的情况?

时间:2015-12-09 16:53:59

标签: javascript asynchronous promise deferred

我理解风格/清晰度的理由是人们可能更喜欢一种方法而不是另一种方法,但我试图理解是否有任何情况不能使用Promise而必须使用延期。作为参考,我使用的是Q javascript library,但我认为它适用于任何其他库和语言。我不相信“Deferreds很酷,因为......”的解释实际上描述了一个简单的q.Promise()调用不可能实现相同的事情的情况(因此你必须使用{{1但是我想检查一下是否正确。

推迟仅仅是为了消除“厄运金字塔”还是更多它们呢?

This question很有意思,但并没有真正解决这个问题。

1 个答案:

答案 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也是一个非常古老的图书馆,考虑更新,更现代的东西。