Chrome等待完成

时间:2011-09-12 01:37:26

标签: javascript callback google-chrome-extension

(我认为这是一个回调问题,但我不完全确定)

我有一个想要从所有标签中检索数据的功能。它看起来像:

function retrieveData(callback) {
    getAllTabs(function(openedTabs) {
        for(var t=0; t<openedTabs.length; t++) {
            //get data from this tab
        }
    });
    //log(look at updated data)
}

function getAllTabs(callback) {
    if(callback) {
        chrome.windows.getAll({populate: true}, function(windows) { 
            //get tabs from windows; callback(tabs)
        });
    }
}

我的问题不在于我没有从标签中获取数据。这很好。如果我调用retrieveData,则函数按顺序s.t.发生。在我已经离开函数retrieveData之前,我没有得到数据,即如果我查看我的数据,那个日志语句在getAllTabs中,没有更新。 如何解决这个问题,以便数据按顺序排列?

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解问题的措辞,但我认为问题在于你正在处理异步请求而不是同步请求。当您致电chrome.windows.getAll时,该功能不会立即返回所有标签。相反,你对Google Chrome说:“我想要所有标签,但不要马上给我。当你拥有所有标签时,运行这个回调函数”

如果要在获取所有选项卡后按顺序运行log(look at updated data),则应将其放在传递给getAllTabs的回调函数中

function retrieveData(callback) {
    getAllTabs(function(openedTabs) {
        for(var t=0; t<openedTabs.length; t++) {
            //get data from this tab
        }
        //log(look at updated data)
    });
}