我开始使用一个实际上可以顺利运行的JavaScript MMORPG.目前,我创建了一个演示来证明我可以移动角色并让他们互相聊天,以及看到彼此在现场移动.
现在Javascript计时器是我没有广泛使用的东西,但据我所知,如果我错了就纠正我,是否同时发生多个setIntervals并不能很好地运行b/c它只是在一个线程上.
让我们说我希望有10个不同的人通过使用带有setInterval的精灵背景定位来对怪物进行火球训练 - 该动画需要10个setIntervals来重新绘制用于精灵背景位置移位的DOM.那不是一辆大马车吗?
我想知道是否有办法绕过这一切,也许使用Canvas,这样动画可以同时发生而不创建事件队列,我不必担心计时器.
希望有意义,如果我需要进一步澄清,请告诉我.
好的,非常简单的问题.我在javascript参加速成课程.
如果我
timer = setTimeout(..., 500)
用来设置定时器,然后clearTimeout(timer)
清除定时器,定时器的整数值不会改变,所以我的问题是如何知道定时器是超时还是清除?
我想使用if (timer) {...}
,但显然正整数总是返回true.
我正在努力解决下面的代码.我尝试了很多不同的方法,但我最终得到了两个不正确的结果之一.
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) 我有一个阵列.我可以用foreach方法循环它.
data.forEach(function (result, i) {
url = data[i].url;
request(url);
});
Run Code Online (Sandbox Code Playgroud)
请求函数正在向给定的URL发出http请求.但是,同时提出所有这些请求会导致各种问题.
所以我认为我应该通过引入某种计时器来减慢速度.
但我不知道如何将forach循环与setTimeOut/setInterval结合起来
请注意我在服务器(nodejs)而不是浏览器上执行此操作.
谢谢你的帮助.
如何从其事件函数内部访问setTimeout/setInterval调用的进程id,因为Java线程可能访问自己的线程ID?
var id = setTimeout(function(){
console.log(id); //Here
}, 1000);
console.log(id);
Run Code Online (Sandbox Code Playgroud) 我一直在使用在我的应用程序中使用setInterval(fn,delay)函数的脚本,在阅读了setTimeout和JS如何工作后,我遇到了一些奇怪的结果,所以我做了一个测试:这是jsfiddle https:// jsfiddle.净/ jyq46uu1/2 /
和建议的代码:
var limit = 1000000000;
var intervals = 0;
var totalTime = new Date();
var startTime = new Date();
var uid = setInterval(
function () {
// final lap?
if (intervals == 9) clearInterval(uid);
for (i = 0; i < limit; i += 1) {
// just working the CPU
}
// reduce the iterations
limit = limit / 10;
intervals += 1;
console.log('Interval ' + intervals +' Time elapsed : ' + (new Date() …
Run Code Online (Sandbox Code Playgroud) 正如我已经了解的那样(这里:https://www.youtube.com/watch?v = 8aGhZQkoFbQ),在某些情况下,调用setTimeout时延迟0ms(因为事件循环)会很有用.
现在,每当我使用时,setTimeout
我也会小心地clearTimeout
在适当的位置打电话,以确保没有任何东西留在某处,并在我不希望它被执行的地方执行.
所以我的问题是:clearTimeout
在setTimeout
0ms 之后打电话是否有必要(有意义吗?)传递的函数会立即附加到回调队列中,因此我认为clearTimeout
不会(也不能)执行任何操作.或者clearTimeout
甚至可以从回调队列中删除传递的函数(因此在超时到期之后但在函数执行之前)?
第二个问题:即使它没有做任何事情,clearTimeout
在这些情况下总是要求"最佳做法" 吗?
就像我在这里解释的那样,我不能再使用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)"
}});
Run Code Online (Sandbox Code Playgroud)
我的小提琴测试:https://jsfiddle.net/mlefree/xzh3w2we/
TKS
我的问题是setTimeout运行吗?about 5 seconds
较早。例如,当我将其设置为时5 seconds
,它将立即运行,但是当我在上时15 seconds
,它将在10 seconds
以后运行。
我什至调查了这个问题:React Native中的setTimeout,但是我仍然无法解决问题
changeNotify() {
let that = this;
console.log("before");
setTimeout(function () {
console.log("After");
that.setState({notifyModal: false})
}, 5000);
}
Run Code Online (Sandbox Code Playgroud)
并在渲染
<Button
title='change'
onPress={() => this.setState({notifyModal: true},()=>this.changeNotify())}
/>
Run Code Online (Sandbox Code Playgroud) setTimeout
在React上使用Javascript中的函数时,我们正在努力解决一个奇怪的问题。
由于在中使用代码setTimeout
,因此运行速度要比不使用代码时运行速度慢得多setTimeout
!
作为比较,该性能导致:
使用
setTimeout
:1391毫秒,
不使用setTimeout
:15毫秒
在API回调中(例如axios
),也会发生setTimeout版本!
下面显示了一个简单的示例代码:
codesandbox
谁能解释发生了什么事?
import React, { useState } from "react";
import ReactDOM from "react-dom";
function App() {
const [value, setValue] = useState("");
const [time, setTime] = useState("");
const startSample = () => {
const startTimeStamp = new Date().valueOf();
for (let i = 0; i < 5000; i++) {
setValue(`test-${i}`);
// console.log(`test-${i}`);
}
const endTimeStamp = new Date().valueOf();
setTime(`${endTimeStamp - startTimeStamp}ms`);
}; …
Run Code Online (Sandbox Code Playgroud) javascript ×10
settimeout ×10
setinterval ×2
timer ×2
blocking ×1
closures ×1
for-loop ×1
node.js ×1
performance ×1
react-native ×1
reactjs ×1
throttling ×1