Javascript 将chrome.tabs.query放入函数中总是返回未定义的结果

Javascript 将chrome.tabs.query放入函数中总是返回未定义的结果,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在制作一个Chrome扩展,它可以在当前活动窗口中获取当前活动选项卡的id。使用环绕逻辑lof的chrome.tabs.query会让我的代码变得凌乱,但将其放在自己的函数中以返回当前选项卡总是返回未定义的-为什么 function _getCurrentTab(){ var theTab; chrome.tabs.query({active:true, currentWindow:true},function(tab){ theTab = tab;

我正在制作一个Chrome扩展,它可以在当前活动窗口中获取当前活动选项卡的id。使用环绕逻辑lof的chrome.tabs.query会让我的代码变得凌乱,但将其放在自己的函数中以返回当前选项卡总是返回未定义的-为什么

function _getCurrentTab(){
    var theTab;
    chrome.tabs.query({active:true, currentWindow:true},function(tab){
        theTab = tab;
    });
    return theTab;
};
console.log(_getCurrentTab());

有人可以帮忙吗?

chrome.tabs.query
是异步的,因此您的返回在回调中的
theTab=tab
或回调本身执行之前执行,因此请尝试:

function _getCurrentTab(callback){ //Take a callback
    var theTab;
    chrome.tabs.query({active:true, currentWindow:true},function(tab){
        callback(tab); //call the callback with argument
    });
};

_displayTab(tab){ //define your callback function
    console.log(tab);
 };

 _getCurrentTab(_displayTab); //invoke the function with the callback function reference

chrome.tabs.query
是异步的,因此您的返回在回调中的
theTab=tab
或回调本身执行之前执行,因此请尝试:

function _getCurrentTab(callback){ //Take a callback
    var theTab;
    chrome.tabs.query({active:true, currentWindow:true},function(tab){
        callback(tab); //call the callback with argument
    });
};

_displayTab(tab){ //define your callback function
    console.log(tab);
 };

 _getCurrentTab(_displayTab); //invoke the function with the callback function reference

@tripRev这是处理回调的方式,如果您未定义,仍然只需在chrome.tabs.query回调本身中放置一个console.log(tab),它将是未定义的,因为还有其他错误。3年后再次访问此项,我可以看出您是绝对正确的。如果您想要一个返回当前选项卡的func,您不能立即使用结果,您需要提供一个cbfunc,在完成时使用它。@tripRev这是处理回调的方式,如果您未定义,仍然只需在chrome.tabs.query回调本身中放一个console.log(tab),它将是未定义的,因为有些事情是错的。三年后重新审视这一点,我可以看出你是绝对正确的。如果需要返回当前选项卡的func,则不能立即使用结果,需要提供一个cbfunc,在完成时使用它。