就像我解释here一样,我不能再使用window.setTimeout()和任何窗口经典函数,如clearInterval等...);但我需要将JS块代码称为异步代码。
这就是我使用XHR请求的原因。
使用XHR实现window.setTimeout()的智能替代方法的最佳方法是什么?
// Not working :(
setTimeout(function(){
document.getElementById("messageTimer").innerHTML = "Happy New Year ! (old version)";
}, 10);
// with or without jQuery - but XHR
jQuery.ajax({
url: "/local/url/easy",
success: function(html, textStatus, jqXHR) {
// a loop ?
// timeout done ?
document.getElementById("messageTimer").innerHTML = "Happy New Year ! (working version)"
}});
我的小提琴测试:https://jsfiddle.net/mlefree/xzh3w2we/
韩国社交协会
答案 0 :(得分:2)
尝试使用jQuery version 3.0 .animate()
,现在使用requestAnimationFrame
// Creates a jQ object where elem set to index of [0]
// a plain object with value of 0 `{to:0}`
// call .animate() chained to the jQ object
// Animates `{to:0}` value from 0 - 1
// $({to:0}).animate({to:1}
var duration = 5000;
$({to:0}).animate({to:1}, duration, function() {
// do stuff after `duration` elapsed
$("#messageTimer").html("Happy New Year ! (working version)")
})
<script src="https://code.jquery.com/jquery-3.0.0-beta1.min.js"></script>
<div id="messageTimer"></div>
答案 1 :(得分:-2)
这样的事情怎么样?
var delay = 10000; // milliseconds
var before = Date.now());
while (Date.now() < before + delay) {};
alert('The delay has passed!');
此外,您可能对Promise对象感兴趣。哪个可以给你这样的somtehing:
var customDelay = new Promise(function(resolve) {
var delay = 10000; // milliseconds
var before = Date.now();
while (Date.now() < before + delay) {};
resolve('Success!');
});
customDelay.then(function(msg) {
document.getElementById("messageTimer").innerHTML = "Happy New Year !';
});
--- --- EDIT Promise对象是ECMAScript 6的一部分,因此会出现向后兼容性问题。
幸运的是,jQuery确实拥有自己的Promises实现! Introduction to jQuery Promises
有关文档,请参阅此页面。实施将类似。