$ .when为单个$ .Deferred做什么?

时间:2012-06-06 15:40:15

标签: jquery jquery-deferred

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

var deferred = $.Deferred();

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

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

2 个答案:

答案 0 :(得分:6)

来自$.when [docs]文档:

  

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

因此$.when(deferred).then(...)deferred.promise().then(...)相同。

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

因此,使用$.when和直接在延迟对象上调用.then之间基本没有区别。

我认为将单个延迟对象显式传递给$.when并不合理,因为您没有任何优势。但是,可能存在未知数量的延迟对象,这意味着它也可能只有一个。

答案 1 :(得分:0)

您始终可以.then.then只是您需要同时使用.done.fail时的快捷方式