我有一些JavaScript代码,如下所示:
function statechangedPostQuestion()
{
//alert("statechangedPostQuestion");
if (xmlhttp.readyState==4)
{
var topicId = xmlhttp.responseText;
setTimeout("postinsql(topicId)",4000);
}
}
function postinsql(topicId)
{
//alert(topicId);
}
Run Code Online (Sandbox Code Playgroud)
我得到一个topicId
未定义的错误在使用该setTimeout()
函数之前,一切正常.
我希望postinsql(topicId)
在一段时间后调用我的函数.我该怎么办?
我正在学习JavaScript,最近我学到了关于JavaScript计时事件的知识.当我setTimeout
在W3Schools学习时,我注意到一个奇怪的人物,我之前没有遇到过.他们使用双引号然后调用该函数.
例:
setTimeout("alertMsg()", 3000);
Run Code Online (Sandbox Code Playgroud)
我知道JavaScript中的双引号和单引号表示字符串.
我也看到我可以这样做:
setTimeout(alertMsg, 3000);
Run Code Online (Sandbox Code Playgroud)
用括号表示,没有括号,它被复制.当我使用引号和括号时,它变得疯狂.
如果有人能向我解释这三种使用方式之间的区别,我将很高兴setTimeout
:
括号:
setTimeout("alertMsg()", 3000);
Run Code Online (Sandbox Code Playgroud)
没有引号和括号:
setTimeout(alertMsg, 3000);
Run Code Online (Sandbox Code Playgroud)
第三个是仅使用引号:
setTimeout("alertMsg", 3000);
Run Code Online (Sandbox Code Playgroud)
注意:更好的setTimeout
参考来源是MDN.
如何将上下文传递给setTimeout
?我想打电话this.tip.destroy()
,如果this.options.destroyOnHide
在1000毫秒.我怎样才能做到这一点?
if (this.options.destroyOnHide) {
setTimeout(function() { this.tip.destroy() }, 1000);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试以上时,this
指的是窗口.
我正在尝试使用新的异步功能,我希望解决我的问题将来会帮助其他人.这是我正在运行的代码:
async function asyncGenerator() {
// other code
while (goOn) {
// other code
var fileList = await listFiles(nextPageToken);
var parents = await requestParents(fileList);
// other code
}
// other code
}
function listFiles(token) {
return gapi.client.drive.files.list({
'maxResults': sizeResults,
'pageToken': token,
'q': query
});
}
Run Code Online (Sandbox Code Playgroud)
问题是,我的while循环运行得太快,并且脚本每秒向google API发送太多请求.因此,我想建立一个延迟请求的睡眠功能.因此我也可以使用此函数来延迟其他请求.如果有其他方式延迟请求,请告诉我.
无论如何,这是我的新代码不起作用.请求的响应返回到setTimeout中的匿名异步函数,但我只是不知道如何将响应返回给sleep函数resp.到最初的asyncGenerator函数.
async function asyncGenerator() {
// other code
while (goOn) {
// other code
var fileList = await sleep(listFiles, nextPageToken);
var parents = await requestParents(fileList);
// other code
}
// other code
} …
Run Code Online (Sandbox Code Playgroud) 请告诉我如何在coffeescript中写下面的javascript.
setTimeout(function(){
something(param);
}, 1000);
Run Code Online (Sandbox Code Playgroud) 有没有类似于jQuery的JavaScript方法delay()
或wait()
(在特定时间内延迟执行脚本)?
通常,我将间隔设置为变量然后清除它,var the_int = setInterval(); clearInterval(the_int);
但为了我的代码工作我把它放在一个匿名函数:
function intervalTrigger() {
setInterval(function() {
if (timedCount >= markers.length) {
timedCount = 0;
}
google.maps.event.trigger(markers[timedCount], "click");
timedCount++;
}, 5000);
};
intervalTrigger();
Run Code Online (Sandbox Code Playgroud)
我该如何清除这个?我试了一下并试图var test = intervalTrigger(); clearInterval(test);
确定,但那没用.
基本上,我需要这个来点击我的谷歌地图后停止触发,例如
google.maps.event.addListener(map, "click", function() {
//stop timer
});
Run Code Online (Sandbox Code Playgroud) 我正在测试setTimeout
使用此测试的准确性.现在我注意到(正如预期的那样)setTimeout
并不是非常准确,但对于大多数设备并不是非常不准确.现在,如果我在Chrome中运行测试并让它在后台标签中运行(那么,切换到另一个标签并在那里浏览),返回测试并检查结果(如果测试完成),它们会发生显着变化.看起来超时运行速度慢得多.在FF4或IE9中测试没有发生这种情况.
因此,看起来Chrome暂停或至少减慢了无法关注的标签中的javascript执行速度.关于这个问题在网上找不到多少.这意味着我们无法运行后台任务,例如使用XHR调用定期检查服务器,并且setInterval
(我怀疑看到相同的行为setInterval
,如果有时间,我会编写测试).
有没有遇到过这个?这种暂停/减速会有解决方法吗?你会把它称为一个错误,我应该这样提交吗?
任何人都能告诉我是否存在Android的setInterval/setTimeout的等价物?有人有任何关于如何做的例子吗?
当传递一个大的毫秒值时,我遇到了一些意想不到的行为setTimeout()
.例如,
setTimeout(some_callback, Number.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)
和
setTimeout(some_callback, Infinity);
Run Code Online (Sandbox Code Playgroud)
两者都导致some_callback
几乎立即运行,好像我已经通过0
而不是大量的延迟.
为什么会这样?
javascript ×10
settimeout ×10
callback ×2
android ×1
async-await ×1
coffeescript ×1
dom-events ×1
java ×1
parameters ×1
tabs ×1
this ×1