【问题标题】:What does $.when do for a single $.Deferred?$.when 对单个 $.Deferred 有什么作用?
【发布时间】:2012-06-06 15:40:15
【问题描述】:

我正在尝试理解$.when,我可以看到,当您想在继续之前等待多个延迟时,它会很有用。但是,我不确定我是否理解使用 $.when 并延迟一个的用例。举例说明:

var deferred = $.Deferred();

// Is this ever useful?
$.when(deferred).then(...)

// Or can I always do this?
deferred.then(...)

【问题讨论】:

    标签: jquery jquery-deferred


    【解决方案1】:

    来自$.when [docs] 文档:

    如果将单个 Deferred 传递给 jQuery.when,则该方法将返回其 Promise 对象(Deferred 方法的子集)。

    所以$.when(deferred).then(...)deferred.promise().then(...) 相同。

    promise 对象只是延迟对象的有限接口。它允许添加回调,但不能更改 Deferred 的状态(解决,拒绝它)。

    所以结论是,使用$.when 和直接在延迟对象上调用.then 基本上没有区别。

    我认为将单个延迟对象显式传递给$.when 是没有意义的,因为您没有任何优势。但是,在某些情况下,您有 未知 个延迟对象,这意味着它也可能只有一个。

    【讨论】:

      【解决方案2】:

      .then 总是可以的,.then 只不过是你需要同时使用.done.fail 的快捷方式

      【讨论】:

      • 我想你误解了我的问题。我在问是否在 $.when 中包装一个 deferred 是否会向 deferred 添加任何附加功能。比直接在单个原始 deferred 上调用方法更有用吗?
      • $.when 的目的是创建一个新的延迟对象,该对象在所有传入的延迟对象都被解决时解决,或者在其中任何一个失败时失败。如果只传入一个延迟对象,则简单地返回相同的延迟对象。您可以从 api api.jquery.com/jQuery.when 中找到所有这些信息
      • 我已经重读了该页面 20 多次,并且知道 promise 对象正在被返回 :) 我的问题是什么时候对 1 deferred 有用?
      • 无论你传入 $.when 什么,你都会得到一个返回的 promise 对象。那是在 API 的第一段中。如果你有一个延迟对象,而你需要一个 promise 对象,请调用 .promise()。当您可以自己在延迟对象上调用.promise() 时,使用.when() 毫无意义。
      猜你喜欢
      • 2023-03-08
      • 2013-01-19
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 2015-07-25
      • 2012-01-27
      • 2015-11-12
      • 1970-01-01
      相关资源
      最近更新 更多