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

Javascript 是否存在无法使用承诺而必须使用延期承诺的情况?,javascript,asynchronous,promise,deferred,Javascript,Asynchronous,Promise,Deferred,我从风格/清晰性的角度理解,人们可能更喜欢一种方法而不是另一种方法,但我试图理解是否存在任何情况,即您不能使用承诺,而必须使用延期承诺。作为参考,我正在使用,但我想它将适用于任何其他库和语言。我不相信“延迟很酷,因为…”下面的解释实际上描述了一种情况,即通过一个简单的q.Promise()调用(因此您必须使用延迟)不可能实现同样的目标,但我想检查一下这是否正确 尊重仅仅是为了消除“末日金字塔”,还是还有更多 这很有趣,但并没有真正解决这个问题。不,没有这种情况。通过显示promise构造函数之间

我从风格/清晰性的角度理解,人们可能更喜欢一种方法而不是另一种方法,但我试图理解是否存在任何情况,即您不能使用承诺,而必须使用延期承诺。作为参考,我正在使用,但我想它将适用于任何其他库和语言。我不相信“延迟很酷,因为…”下面的解释实际上描述了一种情况,即通过一个简单的
q.Promise()
调用(因此您必须使用
延迟
)不可能实现同样的目标,但我想检查一下这是否正确

尊重仅仅是为了消除“末日金字塔”,还是还有更多


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

不,没有这种情况。通过显示promise构造函数之间的转换,可以很容易地证明您可以使用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也是一个相当古老的图书馆,考虑一些更新的和现代的。< /P > 1。很好的回答,清楚地看到你可以在两者之间进行翻译,谢谢本杰明。2.很好的链接。我实际上是在做“当您将API转换为承诺时,应该只使用延迟对象”,因为我认为节点MongoClient.connect没有传回承诺。我发现Typescript定义并不像它那样是最新的:。3.Q很老了,但似乎很好用,有更好的推荐吗?再次非常感谢:)@AJP几乎是