执行函数时,javascript 是否有一些延迟

Is there some delay for javascript when executing a function

本文关键字:延迟 是否 javascript 函数 执行      更新时间:2023-09-26

我正在尝试创建一个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运行时,它会显示值。