这个问题是精心提炼的非异步函数版本,作为jQuery Deferred执行.
我们有2个jsfiddles:
http://jsfiddle.net/XSDVX/1/ - 尽管调用了notify()函数,但不会触发progress事件.
http://jsfiddle.net/UXSbw/1/ - 这里按预期触发进度事件.
唯一的区别是一行代码:
setTimeout(dfd.resolve,1);
Run Code Online (Sandbox Code Playgroud)
与
dfd.resolve();
Run Code Online (Sandbox Code Playgroud)
问题是:
当我们延迟解决时,如何捕获在此回调返回之前调用的.notify?想一想..then获取从它的第一个参数返回的延迟对象,并从中创建一个新的延迟对象,绑定到它完成的进度和失败事件.如果在返回deferred之前调用了notify,那么即使使用setTimeout,如何捕获它呢?(感谢/sf/users/28045811/询问此问题)
我可以摆脱setTimeout()并仍然有进展回调被解雇?