通过$ .when传播进度通知

时间:2015-03-30 14:46:12

标签: javascript jquery jquery-deferred

我正在尝试获取进度通知(deferred.notify)以传播到由$ .when创建的承诺:

var d1 = $.Deferred(),
    d2 = $.Deferred(),
    w  = $.when(d1, d2);

w.progress(function(x) { $('pre').append(String(x)+'\n'); });
d2.notify('d2');
d1.notify('d1');
d2.notify('d2-2');
d1.notify('d1-2');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre></pre>

进度回调见

undefined
d1
d1
d1-2

发生了什么事?

2 个答案:

答案 0 :(得分:2)

使用多个参数调用您的进度回调,每个参数对应传递给.when()的每个承诺,但您的处理程序只接受一个。

电话是:

undefined   d2          d2.notify('d2')
d1          d2          d1.notify('d1')
d1          d2-2        d2.notify('d2-2')
d1-2        d2-2        d1.notify('d1-2')

如果你看第一栏,你会发现这正是你所看到的。

&#13;
&#13;
var d1 = $.Deferred(),
    d2 = $.Deferred(),
    w  = $.when(d1, d2);

w.progress(function(x, y) { snippet.log(x + ", " + y) });
d2.notify('d2');
d1.notify('d1');
d2.notify('d2-2');
d1.notify('d1-2');
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

参数基于所附的Deferreds。所以第一个用于d1,因为之前没有传递/设置消息,所以它是未定义的。

var d1 = $.Deferred(),
    d2 = $.Deferred(),
    w  = $.when(d1, d2);

w.progress(function (d1Notify, d2Notify) { 
    var x =  d1Notify + "|" + d2Notify; 
    $('pre').append(String(x)+'\n'); 
});
d2.notify('d2');
d1.notify('d1');
d2.notify('d2-2');
d1.notify('d1-2');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre></pre>