【问题标题】:Are the deferred functions passed into when() run asynchronously or syncrously?传入 when() 的延迟函数是异步运行还是同步运行?
【发布时间】:2012-08-27 13:00:27
【问题描述】:

假设我有以下代码:

$.when(func1(),funct2(),func3())
 .done(...)
 .fail(...);

我想知道这些函数是否会立即被调用,如果 jQuery 会在它们被解析时连续调用它们。根据文档,它们似乎将异步运行:

在将多个 Deferred 对象传递给 jQuery.when 的情况下,该方法从一个新的“主” Deferred 对象返回 Promise,该对象跟踪它已传递的所有 Deferred 的聚合状态。

...

在其中一个 Deferred 被拒绝的多个 Deferred 情况下,jQuery.when 立即为其主 Deferred 触发 failCallbacks。请注意,此时某些 Deferred 可能仍未解决。

我读到这里的方式是 func1、func2 和 func3 都会立即被触发,并且返回的主延迟对象将处理调用正确的回调函数,但是每当检测到第一个拒绝()时,失败( ) 回调将立即触发。我对此的理解是正确的还是我遗漏了什么?

【问题讨论】:

  • func1()funct2()func3() 是否返回 Deferred 对象?这些函数将在$.when() 被调用之前被调用,因为你是在自己调用它们。
  • 是的,这只是一个假设,但假设它们都会返回一个 promise() 并且它们都会被解决。

标签: jquery


【解决方案1】:

你的理解是正确的。

done 回调仅在所有Deferred 对象都被解析时调用。

另一方面,fail 回调将在任何 Deferred 对象被拒绝后立即调用,而不管传递给$.when() 的另一个Deferred 的状态如何。

换句话说,它就像一个短路的AND 运算符。

【讨论】:

    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多