这是一个jQuery Deferred API错误吗?

时间:2014-09-25 08:07:42

标签: jquery jquery-deferred

正如jQuery文档在deferred.notify()中所说:

在Deferred之后对.notify()的任何调用被解析或拒绝(或之后添加的任何progressCallbacks)都将被忽略。

但是当我读取jQuery源代码时,只有在解析或拒绝延迟对象时才会锁定progressCallback。因此,如果在调用.resolve()或.reject()之前未调用.notify(),则将禁用progressCallback,但如果在调用.resolve()或.reject()之前调用了.notify() ,progressCallback刚刚被锁定,.progress()方法仍然可用。

这个问题存在于jQuery的1.8边缘版本中。

您可以在此处查看代码示例:

````     

var t = $('#test');
var de = $.Deferred();
de.progress(function(){t.append('progress 1<br/>');});
de.notify();
de.resolve();
de.progress(function(){t.append('progress 2<br/>');}); // should not be executed
de.progress(function(){t.append('progress 3<br/>');});
de.progress(function(){t.append('progress 4<br/>');});
de.progress(function(){t.append('progress 5<br/>');});

````

1 个答案:

答案 0 :(得分:0)

这是按预期工作的,尽管文档对该页面的预期行为并不清楚。如果你检查deferred.progress() page,它会说:

  

当Deferred被解析或拒绝时,将不再调用进程回调,除了在Deferred进入已解决或被拒绝状态之后添加的任何progressCallbacks在添加它们时立即执行,使用传递给它们的参数.notify()或notifyWith()调用。