我可以将 Promise 传递给 jQuery.when(),还是只传递给 Deferreds?

Jon*_*ino 5 javascript jquery parameter-passing jquery-deferred .when

jQuery.when()的文档说这个函数需要延迟。但是,它稍后还说:

如果将单个参数传递给 jQuery.when() 并且它不是 Deferred 或 Promise ...

这似乎意味着它也可以采用 Promises。但是 Promises 不是 Deferreds——它们有一个 Deferred 方法的子集。我猜你可以说 Deferred 是 Promise,但 Promise 不是 Deferred。

问题:

  1. $.when() 可以接受 Promises 或 Deferreds 吗?这似乎在我的测试中有效。
  2. 文档中是否有错误?我认为应该说 $.when() 需要 Promises,而不仅仅是 Deferreds。

gue*_*314 3

该文档试图传达的是 它将接受既不是 a 、 a也不是 a$.when()的值;该值将被视为已解决,这在句子的下一部分中进行了描述jQuery.Deferred()jQuery.promise()PromisejQuery.Deferred()

如果传递单个参数jQuery.when()并且它不是 Deferred 或 Promise,它将被视为已解析的 Deferred,并且附加的任何 didCallbacks 将立即执行。

例如

$.when(1).then(function(data) {
  alert(data)
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://code.jquery.com/jquery-git.js">
</script>
Run Code Online (Sandbox Code Playgroud)