$ .Deferred notify()& progress()同步混淆

时间:2014-05-02 07:39:34

标签: 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
});

http://jsfiddle.net/uShAP/

1 个答案:

答案 0 :(得分:1)

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

var dfd = $.Deferred();

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

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

这是因为当您设置进度方法并且已经调用了通知时,您可能只想接收最后一个值,因此您可以立即反映当前状态。