执行函数时,javascript 是否有一些延迟
Is there some delay for javascript when executing a function
我正在尝试创建一个chrome扩展,当我的javascript正在执行时,我遇到了一个非常奇怪的问题。某些代码接缝会延迟运行。
这是代码:
var windowArr = new Array();
function create(t) //t = tab to create new window with
{
newWindow = new Object();
newWindow.tabId = t.id;
chrome.windows.create(newWindow, function(w){windowArr.push(w.id);}); //w = new window
// Here is where it gets weird
alert(windowArr[0]);// returns "undefined"
alert(windowArr[0]);// returns "573" // the correct value
}
延迟弄乱了我代码的其他部分。
可能是什么原因造成的?
chrome.windows.create
是异步的。
因此,您应该将其插入回调中,或者插入其中调用的另一个函数中。
第二个警报有效,因为当您关闭第一个警报框时,窗口已创建。(数组已填充)
这里有一个例子:
chrome.windows.create(newWindow, function(w){
windowArr.push(w.id);
step2();
});
function step2() {
alert(windowArr[0]);
}
发生这种情况是因为您的函数回调和alert
是异步运行的。如果要查看这些值,请将 alert 语句放在函数回调中:
function create(t) //t = tab to create new window with
{
newWindow = new Object();
newWindow.tabId = t.id;
chrome.windows.create(newWindow, function(w){
windowArr.push(w.id);
alert(windowArr[0]);
alert(windowArr[0]);
});
}
或者,如果要将这些值分配给局部变量,可以执行以下操作:
function create(t) //t = tab to create new window with
{
newWindow = new Object();
newWindow.tabId = t.id;
var myArray = [];
chrome.windows.create(newWindow, function(w){
myArray.push(w.id);
});
alert(myArray[0]);
}
窗口创建是异步的。 chrome.windows.create
计划创建并立即返回,它不会等待创建窗口。当UI在第一个alert()
暂停时,窗口运行完成函数,该函数推送到数组上。因此,当第二个alert
运行时,它会显示值。
相关文章:
- 这是否可能延迟客户端的UpdatePanel更新
- 是否有一个Javascript函数可以使代码在运行时延迟
- 是否有任何方法可以像处理jQuery中附加到XHR延迟对象的done方法处理程序一样处理websocket onmess
- 是否可能/如何像谷歌插件一样为jQuery自动完成设置延迟
- 是否“;onload()"HTML的延迟与加载javascript的延迟冲突
- 如何确定 jQuery 对象是否延迟
- 执行函数时,javascript 是否有一些延迟
- 是否可以在 Backbone.js 中延迟获取集合中的模型,同时有时获取(和发布)整个集合
- 异步和延迟语法是否可以异步=“异步”
- 是否有一个好的图表 API,可以在滚动/缩放时使用 Ajax 延迟加载大型数据集
- 服务器的响应延迟超过24小时-是否可能
- 是否可以延迟加载Jquery(而不是插件)
- 是否可以延迟用户访问的第一个页面上的元素加载
- jQuery.css():属性中是否存在固有延迟's对元素的应用程序
- 是否有可能创建一个节流函数,它可以将另一个函数(也有参数)和时间延迟作为参数
- 给setInterval或setTimeout传递一个分数延迟是否安全?
- 是否使用负延迟调用setTimeout
- 在PhantomJS中,page.switchToFrame(k)是否需要延迟才能调用page.evaluate()来识
- JavaScript中的setTimeout是否接受实(浮点)延迟times_ ?
- 在JavaScript中是否有一种方法可以延迟处理web套接字消息,直到设置了标志