在quickstart guide for the Google Drive API中,一旦加载了客户端库,就会调用以下函数:
// Called when the client library is loaded to start the auth flow.
function handleClientLoad() {
window.setTimeout(checkAuth, 1);
}
以{1}}延迟调用setTimeout
的目的是什么,而不是立即调用checkAuth
?
答案 0 :(得分:10)
Javascript具有异步I / O(ajax /请求)以及setTimeout
和setInterval
,
运行setTimeout
和1毫秒(或0)的一种用法是告诉代码在之后运行后面的同步代码。这是一个例子
setTimeout(function(){
alert("World");
},1);
alert("Hello");
//alerts "Hello" then "World"
我想简单地回答一下问题,如果你感兴趣的话,有更多关于setTimeout在the MDN article about it
中如何运作的细节答案 1 :(得分:7)
通过使用setTimeout
,您可以在checkAuth
功能完成之前使页面具有交互性。
基本上,您阻止checkAuth
阻止该页面。
作为旁注,HTML5规范中指定的最小延迟是5ms,因此等待1ms实际上是等待5ms。如果您回收该时间很重要,则可以使用window.postMessage
以0ms延迟获得相同的结果。这最初设计用于处理跨域通信,但有a similar effect as setting a timeout with 0ms(您无法做到这一点,因为浏览器只允许5毫秒 - 或者在某些旧版浏览器中为10毫秒)。
最后,时间不保证。 JavaScript在一个线程上运行,所以当你把一些东西推到一个计时器上时,它必须等待执行其余部分的开放,然后再转向线程 - 它不会运行平行。
答案 2 :(得分:2)
setTimeout(function, 1)
将在当前执行线程完成后运行function
。浏览器窗口中的JavaScript在单个线程中运行。因此,即使超时为1,它也不会在当前执行结束后运行。例如,考虑以下脚本:
window.setTimeout(checkAuth, 1);
// long code that takes 5 seconds to complete
function checkAuth() {
alert("i m here!");
}
在上面的示例中,您将在5秒后看到警报。