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

时间:2013-10-17 15:42:46

标签: javascript google-chrome-extension delay google-chrome-app

我正在尝试创建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
}

延迟会搞砸我代码的其他部分。

导致这种情况的原因是什么?

3 个答案:

答案 0 :(得分:3)

chrome.windows.create是异步的。

所以你应该把它插入回调中,或者在其中调用的另一个函数中。

第二个警报有效,因为当你关闭第一个警告框时,窗口已经创建。 (并且数组已填满)

这里有一个例子:

chrome.windows.create(newWindow, function(w){
    windowArr.push(w.id);
    step2();
});

function step2() {
    alert(windowArr[0]);
}

答案 1 :(得分:1)

这是因为您的函数回调和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]);

}

答案 2 :(得分:0)

窗口创建是异步的。 chrome.windows.create安排创建并立即返回,它不等待创建窗口。当UI在第一个alert()中暂停时,窗口会运行完成功能,该功能会推送到阵列上。因此,当第二个alert运行时,它会显示值。