Chrome ждет завершения - PullRequest
       14

Chrome ждет завершения

0 голосов
/ 12 сентября 2011

(я думаю, что это проблема с обратным вызовом, но я не совсем уверен)

У меня есть функция, которая хочет получать данные со всех вкладок. Похоже:

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 Ответ

1 голос
/ 12 сентября 2011

Я не уверен, что полностью понимаю формулировку проблемы, но я думаю, что проблема в том, что вы имеете дело с асинхронными запросами, а не синхронными запросами.При вызове 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)
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...