标签: settimeout

了解JavaScript计时器线程问题

我开始使用一个实际上可以顺利运行的JavaScript MMORPG.目前,我创建了一个演示来证明我可以移动角色并让他们互相聊天,以及看到彼此在现场移动.

http://set.rentfox.net/

现在Javascript计时器是我没有广泛使用的东西,但据我所知,如果我错了就纠正我,是否同时发生多个setIntervals并不能很好地运行b/c它只是在一个线程上.

让我们说我希望有10个不同的人通过使用带有setInterval的精灵背景定位来对怪物进行火球训练 - 该动画需要10个setIntervals来重新绘制用于精灵背景位置移位的DOM.那不是一辆大马车吗?

我想知道是否有办法绕过这一切,也许使用Canvas,这样动画可以同时发生而不创建事件队列,我不必担心计时器.

希望有意义,如果我需要进一步澄清,请告诉我.

javascript timer javascript-events settimeout setinterval

7
推荐指数
1
解决办法
3194
查看次数

在Javascript中,setTimeout中使用的变量范围是什么?

我在函数中使用以下代码:

setTimeout("doSomething(var1)",10000);
Run Code Online (Sandbox Code Playgroud)

但是,我也var1可以作为全局变量.10000毫秒后,它会调用本地var1还是全局var1

javascript global-variables settimeout

7
推荐指数
1
解决办法
4630
查看次数

javascript setTimeout调用错误

我想window.setTimeot用我的自定义范围调用该函数,所以我使用该call方法,但有一些错误.

function foo() {
    this.bar = function() {
        console.log("keep going");
        window.setTimeout.call(this,this.bar,100);
    }
    this.bar();
}

new foo;
Run Code Online (Sandbox Code Playgroud)

在Firefox下,这只打印到控制台只有1行,然后什么也没有,在谷歌Chrome下它会抛出一个TypeError.

我的代码有什么问题?

javascript scope call invoke settimeout

7
推荐指数
1
解决办法
2797
查看次数

Javascript - setTimeout关闭问题

我正在努力解决下面的代码.我尝试了很多不同的方法,但我最终得到了两个不正确的结果之一.

for(i = 0; i < result.length; i++) {

    var tmpBlockInfo = {
        size: worldTest.data[0].size,
        xStartPixel :  result[i].x * worldTest.data[0].size,
        yStartPixel : result[i].y * worldTest.data[0].size,
        blockType : (Math.random() * 100 > 10) ? 'path' : 'wall'
    }

    var tmpFunc = function(){
        worldTest.fillBlock(tmpBlockInfo, 157, 152, 124,  255)
    };

    var t = setTimeout(function(){
        tmpFunc()
    } , 500 * i);
}
Run Code Online (Sandbox Code Playgroud)

上面代码的问题是tmpBlockInfo总是得到最后的结果[i] .x/result [i] .y.因此,当超时运行函数时,我正在假设它看到了什么结果[i] .x/result [i] .y在循环之后保持开启(而不是将其作为"新"变量传递)

我认为将它放入函数会解决闭包问题,但没有运气.

还尝试过:

for(i = 0; i < result.length; i++) {

    var tmpBlockInfo = {
        size: …
Run Code Online (Sandbox Code Playgroud)

javascript closures for-loop blocking settimeout

7
推荐指数
1
解决办法
2808
查看次数

在Node.js中限制请求

我有一个阵列.我可以用foreach方法循环它.

data.forEach(function (result, i) {

     url = data[i].url;

     request(url);

});
Run Code Online (Sandbox Code Playgroud)

请求函数正在向给定的URL发出http请求.但是,同时提出所有这些请求会导致各种问题.

所以我认为我应该通过引入某种计时器来减慢速度.

但我不知道如何将forach循环与setTimeOut/setInterval结合起来

请注意我在服务器(nodejs)而不是浏览器上执行此操作.

谢谢你的帮助.

javascript throttling settimeout node.js

7
推荐指数
3
解决办法
4366
查看次数

在JavaScript中,如何从其事件函数中访问setTimeout/setInterval调用的id?

如何从其事件函数内部访问setTimeout/setInterval调用的进程id,因为Java线程可能访问自己的线程ID?

var id = setTimeout(function(){
    console.log(id); //Here
}, 1000);
console.log(id);
Run Code Online (Sandbox Code Playgroud)

javascript settimeout setinterval

7
推荐指数
1
解决办法
7735
查看次数

setTimeout不能与node.js一起使用

我正在编写mocha测试用例来测试以下步骤.我打算在调用另一个API之前进行API调用并等待30分钟.我正在使用内部节点API编写调用REST API来编写此测试用例.但由于某种原因,setTimeout不等待给定的ms.有人可以帮帮我吗?

 describe('Checkout - ', function() {
   before(function() {
     lapetus = test.Lapetus;
   });
  it('Get purchase contract after session is expired [C123]',     function(done) {
    this.timeout(180000000);
    lapetus.run(function() {
     // create customer
     ......

     // create new cart and add one item
     ......

    // create new contract with empty cart id
    .......
    var pc_id =....;

    // wait for 30 minutes for the session to expire
    console.log('wait... ' + new Date);
    this.setTimeout(getPC(lapetus,pc_id), 18000000);
    console.log('ok... ' + new Date);
    done();
  });
});

  var getPC …
Run Code Online (Sandbox Code Playgroud)

javascript settimeout node.js

7
推荐指数
1
解决办法
9649
查看次数

如何使用jquery循环iframe?

我有两个iframe.当页面加载时,iframe1在8秒后加载,我需要在无限循环中显示iframe2替换iframe1.

我尝试了以下代码并将超时设置为8秒和10秒,但iframe1在2秒内更改.

function preview() {
    $('#iframe1').hide();
    $('#iframe2').show();
    setTimeout(function() {
        $('#iframe2').hide();
        $('#iframe1').show();
    }, 8000);
};
setInterval(preview, 10000)
Run Code Online (Sandbox Code Playgroud)

以上也不能顺利加载.如何无缝显示/隐藏它们?

iframe jquery loops settimeout setinterval

7
推荐指数
1
解决办法
491
查看次数

是什么决定了使用promises或setTimeout的延迟函数的调用顺序?

推迟执行函数(例如在自定义事件处理中)是JavaScript中的常见模式(例如,请参见此处).曾经是使用setTimeout(myFunc,0)是唯一的方法,但是有了承诺,现在有另一种选择:Promise.resolve().then(myFunc).

我曾经假设这些几乎可以做同样的事情,但是在处理包含自定义事件的库时,我想我会发现是否存在差异,所以我将以下块放入节点:

var logfn=function(v){return function(){console.log(v)}};

setTimeout(logfn(1),0);
Promise.resolve().then(logfn(2));
logfn(3)();
Run Code Online (Sandbox Code Playgroud)

我期待在控制台上看到3,1,2但是我看到了3,2,1.所以换句话说,Promise并不等同于使用setTimeout并且首先从块中出来.至少在Node中.

我在Chrome和Firefox中重复测试结果相同,但是在Edge中它出现了3,1,2.我还希望非原生的promise库在引擎盖下使用setTimeout,这样就会像Edge一样.

是什么决定了这些来电被解决的顺序?这些不同的环境使用什么模型来确定执行顺序?上述任何一种是否代表标准或非标准行为?

PS我坚决不建议依赖任何这种保持一致,我只是好奇.


在下面给出的答案指出了正确的方向,并且如下面的评论中简要提到的那样,我在Jake Archibald的一篇优秀文章中找到了完整的答案(示例几乎与我上面的代码完全相同),尽管我是加在这里而不是将其隐藏在评论中.

javascript events settimeout node.js es6-promise

7
推荐指数
1
解决办法
264
查看次数

为什么在重画后安排某些东西时建议将setTimeout嵌套在requestAnimationFrame中?

在有关前端工程师性能最佳实践mozilla文档中,建议结合setTimeout使用requestAnimationFrame以在重新绘制后立即运行某些东西:

requestAnimationFrame(() => {
  setTimeout(() => {
    // This code will be run ASAP after Style and Layout information have
    // been calculated and the paint has occurred. Unless something else
    // has dirtied the DOM very early, querying for style and layout information
    // here should be cheap.
  }, 0);
});
Run Code Online (Sandbox Code Playgroud)

为什么这是推荐的解决方案?究竟是什么使它成为在重画后立即安排某些事情的最佳方式?

javascript browser repaint settimeout requestanimationframe

7
推荐指数
1
解决办法
713
查看次数