jQuery.when()的documentation表示此函数采用Deferreds。但是,它后来也说:
如果将单个参数传递给jQuery.when()并且它不是Deferred或Promise ...
这似乎暗示它也可以接受Promises。但Promise不是Deferreds - 它们有Deferred方法的一部分。我想你可以说Deferred是一个Promise,但Promise不是延期。
问题:
答案 0 :(得分:3)
文档试图传达的是protected $dates = ['created_at', 'updated_at', 'expired_on'];
接受的值既不是expired_on
,也不是$.when()
,也不是jQuery.Deferred()
;该值将被视为已解决的jQuery.promise()
,将在句子的下一部分进行描述
如果将单个参数传递给
Promise
并且它不是。{ 延期或承诺,它将被视为已解决的延期和 附加的任何doneCallbacks将立即执行。
例如
jQuery.Deferred()

jQuery.when()

答案 1 :(得分:3)
我想你可以说Deferred是一个Promise,但是Promise不是延迟的。
实际上它们是完全不同的接口,只有jQuery在promise API中混合到它们的延迟中。见What are the differences between Deferred, Promise and Future in JavaScript?
$.when()
可以接受Promises还是Deferreds?
是的,它可以同时使用。但请注意,当您已经知道有承诺或延期时,在其上调用$.when
是没有意义的。
文档中是否有错误?
是的,显然。它甚至不是事实,它只将延迟和承诺视为异步值 - 而是它做了某种鸭子打字检查。你想看看actual implementation:
if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) )
然后,它会对值调用promise
method(或another promise
method或任何.promise
方法)并期望返回的对象具有相应的可链接方法来添加侦听器。