我正在尝试获取进度通知(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
发生了什么事?
答案 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')
如果你看第一栏,你会发现这正是你所看到的。
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;
答案 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>