JS setTimeout() alternative

JS setTimeout() alternative

本文关键字:alternative setTimeout JS      更新时间:2023-09-26

就像我在这里解释的那样,我不能再使用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/

尝试使用

jQuery 版本 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>

这样的事情呢?

var delay = 10000; // milliseconds
var before = Date.now());
while (Date.now() < before + delay) {};
alert('The delay has passed!');

此外,您可能对 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 !';
});

---编辑---Promise 对象是 ECMAScript 6 的一部分,因此会出现向后兼容性问题。

幸运的是,jQuery确实有自己的Promises实现!jQuery Promise 简介

有关文档,请参阅此页面。实现将是类似的。