Javascript JS setTimeout()可选

Javascript JS setTimeout()可选,javascript,xmlhttprequest,settimeout,Javascript,Xmlhttprequest,Settimeout,正如我所解释的,我不能再使用window.setTimeout()和任何经典的窗口函数,如clearInterval等;但我需要将JS块代码作为异步代码调用 这就是我使用XHR请求的原因 使用XHR实现window.setTimeout()的智能替代方案的最佳方法是什么 // Not working :( setTimeout(function(){ document.getElementById("messageTimer").innerHTML = "Happy New Year !

正如我所解释的,我不能再使用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)"
 }});
我的小提琴测试:

Tks

尝试使用,它现在使用
requestAnimationFrame

//创建一个jQ对象,其中elem的索引设置为[0]
//值为0`{to:0}的普通对象`
//链接到jQ对象的call.animate()
//将`{to:0}`值从0到1设置动画
//$({to:0})。设置({to:1})动画
var持续时间=5000;
$({to:0}).animate({to:1},duration,function()){
//在“持续时间”过后做事情
$(“#messageTimer”).html(“新年快乐(工作版)”)
})

像这样的东西怎么样

var delay = 10000; // milliseconds
var before = Date.now());

while (Date.now() < before + delay) {};

alert('The delay has passed!');
var delay=10000;//毫秒
var before=Date.now());
while(Date.now()
此外,您可能对Promise对象感兴趣。这会给你带来这样的东西:

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 !';
});
var customDelay=新承诺(函数(解析){
var delay=10000;//毫秒
var before=Date.now();
while(Date.now()
---编辑--- Promise对象是ECMAScript 6的一部分,因此存在向后兼容性问题

幸运的是,jQuery确实有自己的承诺实现!


有关文档,请参阅本页。实现将与之类似。

Thxs phenxd!它应该可以做到这一点。Promise听起来是async的优雅解决方案。PB:Promise不被IE 9认可:(这不是异步的,即使有承诺,while循环将冻结UI,并且在循环运行时不会执行其他js。我应该完全删除我的答案还是编辑它?这个{to:0}和{to:1}表示什么?请澄清。
$({to:0})
在索引处创建jQuery对象where元素
[0]
是普通对象
{to:0}
,我们可以调用链接到jQuery对象的
.animate()
,该jQuery对象将
to
属性从
0
设置为
1
对象的动画