Javascript $.Deferred notify()&;进程()同步混淆

Javascript $.Deferred notify()&;进程()同步混淆,javascript,jquery,Javascript,Jquery,我正在使用一个延迟对象,有时我想通知同步对象(如果缓存中已经有结果) 为什么它只收到最后一次通知 var dfd = $.Deferred(); for(var i = 0; i < 3; i++){ dfd.notify(i); } dfd.progress(function(i){ console.log(i); // 2 // expected: 0, 1, 2 }); var-dfd=$.Deferred(); 对于(变量i=0;i

我正在使用一个延迟对象,有时我想通知同步对象(如果缓存中已经有结果)

为什么它只收到最后一次通知

var dfd = $.Deferred();

for(var i = 0; i < 3; i++){
    dfd.notify(i);
}

dfd.progress(function(i){
    console.log(i); // 2
    // expected: 0, 1, 2
});
var-dfd=$.Deferred();
对于(变量i=0;i<3;i++){
dfd.通知(i);
}
dfd.进度(功能(i){
console.log(i);//2
//预期值:0、1、2
});

您只收到一个通知,因为在调用notify后设置了进度。 如果先设置进度方法,您将收到所有:

var dfd = $.Deferred();

dfd.progress(function(i){
    console.log(i); 
});

for(var i = 0; i < 3; i++){
    dfd.notify(i);
}
var-dfd=$.Deferred();
dfd.进度(功能(i){
控制台日志(i);
});
对于(变量i=0;i<3;i++){
dfd.通知(i);
}
发生这种情况的原因是,当您设置progress方法并且已经调用了notify时,您可能只希望接收最后一个值,因此可以立即反映当前状态