- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用同步计数器和递归自调用函数来阻止控制流到我的代码的其余部分,直到设置的超时异步函数调用终止并递增我的同步计数器。然而事实证明,出于某种原因,setTimeout 函数甚至从未被调用过,无论是在递归函数内部还是外部。递归调用是否以某种方式优先于 setTimeout 函数?
var localSynchCounter = 0;
(function asynchCall1(){
//only runs the very first iteration of this function
console.log("running..: "+localSynchCounter);
if (localSynchCounter == 0) {
console.log("running autonymous first time");
localSynchCounter ++;
setTimeout(function() {
localSynchCounter ++;
console.log("set time out1 ocmpleted");
}, 0);
setTimeout(function() {
localSynchCounter ++;
console.log("set time out2 ocmpleted");
}, 0);
}
else if (localSynchCounter == 3){
console.log("functions have returned");
return;
}
asynchCall1();
})();
最佳答案
Does the recursive call somehow take priority over the
setTimeout
functions?
是的,因为它是同步的(尽管名为 asynchCall1
),而超时是异步的。
However it turns out that for some reason the setTimeout functions are never even called whether inside the recursive function or even outside of it.
如果您的脚本会终止,它们会(它们已被“安排”执行)。目前您的递归是无限的,因为 localSynchCounter
递增一次但永远不会到达调用结束的 3
。
要使其正常工作,您需要异步调用 asynchCall
(从超时开始):
var localCounter = 0;
(function asyncCall(){
//only runs the very first iteration of this function
console.log("running..: "+localCounter);
if (localCounter == 0) {
console.log("running autonomous first time");
localCounter++;
setTimeout(function() {
localCounter++;
console.log("settimeout 1 completed");
asyncCall();
}, 0);
setTimeout(function() {
localCounter ++;
console.log("settimeout 2 completed");
asyncCall();
}, 0);
} else if (localCounter == 3){
console.log("functions have returned");
return;
}
})();
关于javascript - JS 停止控制流直到异步 setTimeout 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31436543/
要求:用户连续扫描文本框中的作业编号,没有任何延迟。对于每个职位编号,我需要在后台调用 API 来获取扫描职位编号的详细信息。 我做了什么:我编写了一个小模拟代码来激发这个需求。我使用 setTime
我遇到了一个问题:该代码应该按该顺序输出“hi1”“hi2”“hi3”“hi4”。我写了这个简化的代码,实际代码更复杂,导致我无法删除我标记的一些功能。 function test() { c
我的页面上有一个动态创建的 iframe。像这样: var iframe = document.createElement('iframe'); iframe.setAttribute("id","m
我确信这是一个被问过很多次的通用问题,但找不到解决方案。 我有 javascript 使用 setTimeout() 函数来关闭我在设定时间后创建的弹出窗口。 问题:如果我在与创建弹出窗口的脚本相同的
我想在第一个函数完成后执行第二个函数。 结果: i: 0,i: 1,...,i: 9, j: 0,j: 1,...,j: 9 function first(callback){ for
我正在尝试创建一个按钮,以反馈其正在执行的操作。在 Angular 中,我向服务器发出一个放置请求——此时我更改按钮的状态以指示这一点——然后当我收到响应时,我再次更改按钮的状态以反射(reflect
我正在尝试制作一个字符串,它会逐个字母地写出自己直到完成句子,并且每个字母出现的速度基于从 1 到 10 不等的输入。在字符串的末尾,它会闪烁5 秒,直到外星人出现。我的想法是创建一个 setInte
在 Meteor 中,为什么要使用 Meteor.setTimeout() 而不是普通的 setTimeout()? 使用 Meteor.setTimeout() 而不是单纯的 setTimeout
我有这个代码 - function example() { var i = 0; function add() { i++; } setTimeout(
我想知道它们之间有什么区别 window.setTimeout(myFancyFunciton, 1000); 和 setTimeout(myFancyFunciton, 1000); 两者似乎都在做
好吧,我好像遇到了问题。我正在尝试创建一个twicker 来显示数据行。我正在使用 jquery/javascript 在一定时间后隐藏和显示行。代码如下: var timer_is_on
编辑:我最终想在以后使用 setTimeout 恢复变量的先前值 我创建了以下示例来说明我的观点:( JSFiddle ) Push the button Try it var x = {};
我一直在像这样在没有窗口父级的情况下使用超时: setTimeout(FUNC, 1000); 我很好奇,我应该这样使用它吗? window.setTimeout(FUNC, 1000); 有区别吗?
我有一个使用 setTimeout 函数执行动画的函数,结构如下: animation: function() { //first setTimeout(function(){ mak
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
这是一个快速的(损坏的)jsfiddle:http://jsfiddle.net/wH2qF/ 由于某种原因这不起作用...是因为我在另一个 setTimeout 的处理程序中有一个 setTimeo
我有两个 setTimouts,如下所示,根据 if 条件,我想跳过一个超时。 var batchID = []; batchID = getBatchIDs();//this function ge
我只看到一种情况我应该使用 window.setTimeout 而不是 setTimeout,当我在我的闭包,这显然不是很好的做法(除非有非常特殊的用途)。 我注意到 Google Closure 编
我看到这个用了很多,有人告诉我把函数引用放在引号之间是不好的,因为 setTimeout/setInterval evals 引用。这两者之间的实际区别是什么,以至于一个被使用在另一个之上?为什么我看
我正在使用“setTimeout”函数。此代码按预期运行: function myFunction() { console.log('test'); setTimeout(myFunc
我是一名优秀的程序员,十分优秀!