chrome扩展脚本中的函数返回错误的值

时间:2014-08-13 22:31:43

标签: javascript google-chrome-extension

我正在为Chrome扩展程序编写一个功能,以获取当前标签的状态('加载'或者#39;完成')。

currentTabId是一个全局变量。

function getTabStatus() {
    var tabStatus = "foobar";

    chrome.tabs.get(currentTabId, function(tab) {
        tabStatus = tab.status;
    });

    return tabStatus;
}

我希望这个功能可以返回' loading'或者'完成'但它已经回归了foobar'

如果我在第5行的Chrome开发者工具中设置断点(tabStatus = tab.status),则该函数已经返回' foobar'但仍然在断点处停止。

1 个答案:

答案 0 :(得分:1)

这是由异步编程引起的。 chrome.tabs.get会执行,return tabStatus会在tabStatus = tab.status之前运行。您需要安排代码,使其在chrome.tabs.get内继续运行。

正在进行的是,chrome.tabs.get传递了一个回调(您的匿名函数function(tab)),以便在执行get时执行,因此代码为tabStatus = tab.status在您的代码执行return tabStatus之后实际运行。

你需要重写你的代码:

function getTabStatus() {
    var tabStatus = "foobar";

    chrome.tabs.get(currentTabId, function(tab) {
        tabStatus = tab.status;
        doSomething(tabStatus);
    });
}

您需要调用另一个继续执行代码的方法,而不是执行调用返回样式。

这样做的原因是你的代码在继续运行之前不必等待get执行,有点像多线程。它允许您的代码分支到两个方向,可以同时执行两个不同的代码路径,但是某些变量不在正确的范围内,所以当遇到这样的问题时就是这样。

您可以阅读有关异步编程here的更多信息。