(我认为这是一个回调问题,但我不完全确定)
我有一个想要从所有标签中检索数据的功能。它看起来像:
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中,没有更新。 如何解决这个问题,以便数据按顺序排列?
答案 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)
});
}