Javascript 为什么每次进度回调都会收到相同的值?
因此,我正在使用promises和jQuery,我想出了以下代码:Javascript 为什么每次进度回调都会收到相同的值?,javascript,jquery,Javascript,Jquery,因此,我正在使用promises和jQuery,我想出了以下代码: var timeoutAsync = function(millis) { var deferred = $.Deferred(); setTimeout(function () { deferred.notify(millis); deferred.resolve(); }, millis); return deferred.promise(); }; $(document).ready(functi
var timeoutAsync = function(millis) {
var deferred = $.Deferred();
setTimeout(function () { deferred.notify(millis); deferred.resolve(); }, millis);
return deferred.promise();
};
$(document).ready(function() {
var firstPromise = timeoutAsync(1000);
var secondPromise = timeoutAsync(2000);
var thirdPromise = timeoutAsync(3000);
var fourthPromise = timeoutAsync(1234);
$.when(firstPromise, secondPromise, thirdPromise, fourthPromise)
.done(function() { alert("LOL"); })
.fail(function() { alert("FAIL"); })
.progress(function(msg) { console.log(msg); });
});
我希望我的控制台显示四个值,即:1000
、1234
、2000
和3000
。
当我在setTimeout回调中放入一个console.log语句时,它就这样做了。但是有了上面的代码,我得到了1000
四次。
我很确定我在这里遗漏了一些东西,但我似乎在文档中找不到任何关于为什么会发生这种情况的提示。那么为什么会发生这种情况呢
我使用的是jQuery 2.1.1,我在firefox上进行测试,但在IE中也会出现这种情况。这是因为您创建了四个不同的延迟,并将它们全部传递给
$。当
这将为进度处理程序创建一组参数
如果你这样做
.progress(function(msg1, msg2, msg3, msg4) {
console.log(msg1, msg2, msg3, msg4);
});
您将看到延迟解决后的争论
换句话说,每次只记录第一个参数,即传递给第一个延迟的参数的值
检查进度时,必须使用一个延迟对象,然后对该延迟对象使用notify和progress方法,不应创建四个不同的延迟
差不多
var timeoutAsync = function(deferred, millis) {
setTimeout(function () {
deferred.notify(millis);
}, millis);
};
$(document).ready(function() {
var deferred = $.Deferred();
var firstPromise = timeoutAsync(deferred, 1000);
var secondPromise = timeoutAsync(deferred, 2000);
var thirdPromise = timeoutAsync(deferred, 3000);
var fourthPromise = timeoutAsync(deferred, 1234);
deferred.done(function() { alert("LOL"); })
.fail(function() { alert("FAIL"); })
.progress(function(msg) {
console.log(msg);
});
});
这可能对您有所帮助:非常感谢您的回答。在阅读了你的答案后,我阅读了文档以获取进展(),它确实(在某种程度上)表达了你的意思。但肯定没有你解释的那么清楚。