正如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/>');});
````
答案 0 :(得分:0)
这是按预期工作的,尽管文档对该页面的预期行为并不清楚。如果你检查deferred.progress()
page,它会说:
当Deferred被解析或拒绝时,将不再调用进程回调,除了在Deferred进入已解决或被拒绝状态之后添加的任何progressCallbacks在添加它们时立即执行,使用传递给它们的参数.notify()或notifyWith()调用。