Javascript中的window.setTimeout(和相关的setInterval)函数允许您安排将来某个时间执行的函数:
id = setTimeout(function, delay);
Run Code Online (Sandbox Code Playgroud)
其中"延迟"是您希望调用该函数的未来毫秒数.在此时间过去之前,您可以使用以下命令取消计时器:
clearTimeout(id);
Run Code Online (Sandbox Code Playgroud)
我想要的是更新计时器.我希望能够提前或推迟一个定时器,使得该函数被调用x毫秒早或晚比原计划.
如果有一个getTimeout方法,你可以这样做:
originally_scheduled_time = getTimeout(id);
updateTimeout(id, originally_schedule_time + new_delay); // change the time
Run Code Online (Sandbox Code Playgroud)
但据我所知,没有像getTimeout或任何更新现有计时器的方法.
有没有办法访问计划的警报列表并进行修改?
有更好的方法吗?
谢谢!
浏览器是否跟踪活动setInterval和setTimeoutID?或者这完全由开发人员来跟踪?
如果它确实跟踪它们,是否可以通过BOM访问?
我正在考虑向我们的javascript实用程序断言函数添加alert().
我们是一个ajax繁重的应用程序,我们的框架(Ext)通过使用setInterval轮询ajax响应而不是等待readystate == 4来实现ajax的方式,导致我们所有的ajax回调在setInterval堆栈上下文中执行 - - 一个异常/断言吹出它通常会无声地失败.
低级别alert()如何影响浏览器事件循环?根据定义,消息框必须允许win32事件循环泵(响应mbox按钮).这是否意味着其他浏览器事件,就像我们的框架生成的未来setIntervals,调整大小事件等,要火?这会给我带来麻烦吗?
IIRC:您可以使用FF2和FF3.5来查看我正在谈论的差异.
alert('1');
setTimeout(function(){alert('2');}, 10);
alert('3');
Run Code Online (Sandbox Code Playgroud)
FF 3.5显示1-3-2.FF2 [1]显示1-2和3(2和3同时堆叠在一起).我们可以使用从activex启动的win32 mbox在IE8中复制1-2和3,而不是在当天对我们造成严重破坏的警报,我想确保我们不再沿着那条路走下去.
任何人都可以向我指出解释这种行为的特定低级资源,这里的预期行为是什么,以及在低级别上究竟发生了什么,包括为什么行为在FF版本中发生了变化?
[1]你可以在Spoon.net上复制这个,我现在无法正常工作.我只是用FF 2.0.0.20在vm中重新编写它.
我正在尝试使用setTimeout来执行我传递信息的匿名函数,我遇到了麻烦.这个(硬编码版本)可以正常工作:
setTimeout(function(){alert("hello");},1000);
setTimeout(function(){alert("world");},2000);
Run Code Online (Sandbox Code Playgroud)
但是我试图从数组中取出hello和world并将它们传递给函数,而不是(a)使用全局变量,以及(2)使用eval.我知道如何使用全局或eval来做到这一点,但是如何在没有它的情况下做到这一点.这是我想做的(但我知道它不会起作用):
var strings = [ "hello", "world" ];
var delay = 1000;
for(var i=0;i<strings.length;i++) {
setTimeout( function(){alert(strings[i]);}, delay);
delay += 1000;
}
Run Code Online (Sandbox Code Playgroud)
当然,字符串[i]将脱离上下文.如何在没有eval或globals的情况下将字符串[i]传递给该匿名函数?
我正在动态更新setTimeout()函数后的一些元素.jQuery函数.text()似乎在处理时随着数组索引的每次更改而动态更新.但是一个正在改变的引导进度条似乎.css()并.attr()没有动态更新.这是我的页面:http://imdbnator.com/process.php?id = f144caf0843490c0d3674113b03da0c5&redirect = false
您可以看到文本已更改但进度条仅在整个setTimeout()函数完成后结束.另外,如果我设置了delay = 1000.有用.但它因应用而变慢.因此,我需要delay = 0.但为什么进度条不会改变?
这是我的片段
function launch(a) {
var inc = 0;
var maxc = a.length;
var delay = 0; // delay milliseconds
var iID = setInterval(function () {
var index = inc;
var movie = a[inc];
//start processing function
//styling while processing
var markerPer = ((index + 1) / rawListNum) * 100; // marker percentage
$("#procNum").text("(" …Run Code Online (Sandbox Code Playgroud) 我在事件循环中读过几个帖子/ SO线程,根据MDN的文章,
当堆栈为空时,将从队列中取出一条消息并进行处理.
作为一个JS新手,我仍然感到困惑的是 - 什么时候调用堆栈变得"空"?例如,
<script>
function f() {
console.log("foo");
setTimeout(g, 0);
console.log("foo again");
}
function g() {
console.log("bar");
}
function b() {
console.log("bye");
}
f();
/*<---- Is the stack empty here? */
b();
</script>
Run Code Online (Sandbox Code Playgroud)
正确的执行顺序是foo- foo again- bye- bar.
但是今天我开始思考:退出f()电话后,技术上的堆栈是不是很空?我的意思是在那一点上我们不在任何函数内部,并且我们还没有开始任何新的执行,所以不应该处理setTimeout调用消息(已经立即排队),然后继续执行b(),并给出顺序foo- foo again- bar- bye?
如果我们有一百万行代码或一些密集计算要执行并且setTimeout(func, 0)只是在队列中停留多长时间怎么办?
我想要一个字符串出现字符转换为以下代码:
function initText()
{
var textScroller = document.getElementById('textScroller');
var text = 'Hello how are you?';
for(c = 0; c < text.length; c++)
{
setTimeout('textScroller.innerHTML += text[c]', 1000);
}
}
window.onload = initText;
Run Code Online (Sandbox Code Playgroud)
它不起作用..我做错了什么?
这是Underscore.js delay函数的源代码:
_.delay = function (func, wait) {
var args = slice.call(arguments, 2);
return setTimeout(function () { return func.apply(null, args); }, wait);
};
Run Code Online (Sandbox Code Playgroud)
这有什么不同setTimeout?为什么Underscore.js需要delay?
有没有办法可以在reactjs中杀死/(摆脱)超时?
setTimeout(function() {
//do something
}.bind(this), 3000);
Run Code Online (Sandbox Code Playgroud)
在某种点击或动作时,我希望能够完全停止并结束超时.有没有办法做到这一点?谢谢.
我在Javascript中有一个异步函数,我添加了setTimeout.代码看起来像这样:
let timer;
clearTimeout(timer);
timer =setTimeout(() => {
(async() => {
await this._doSomething();
})();
}, 2000);
Run Code Online (Sandbox Code Playgroud)
setTimeout的puprose是在运行函数之前加2秒.确保用户停止输入.
我现在应该从此函数中删除async/await,因为setTimeout是异步的吗?
任何帮助在这里非常感谢!
settimeout ×10
javascript ×9
asynchronous ×2
concurrency ×1
css ×1
event-loop ×1
jquery ×1
loops ×1
reactjs ×1
setinterval ×1
winapi ×1