Вы установки переменной внутри функции обратного вызова асинхронной. Обратный вызов запускается после завершения действия get.
Ваш код будет выполняться в следующем порядке:
chrome.storage.local.get("ABC",callback);
затем
console.log();
затем
callback()
Вы можете убедиться, что, поставив console.log заявление в обратного вызова и видя, что он работает после текущего.
Функции Javascript завершаются до того, как они запускают любые асинхронные обратные вызовы.
Это может иметь больше смысла, как это, что эквивалентно тому, что у вас есть прямо сейчас.
//define the callback
function callbackFunction(result){
global_variable = result; //pass result to global var.
}
//run the get. When it is complete the callback will be added to a queue
//to run next after current operations have completed
chrome.storage.local.get('ABC',callback);
// this will run immediately after the get call
console.log(global_variable);
Если вы хотите работать с переменной вы должны поставить логику в функции обратного вызова (или в отдельной функции, вызываемой функции обратного вызова.
Эта функция называется «асинхронно». –
Я когда-то писал (объяснение непрофессионала проблемы, с которой вы столкнулись) (http://stackoverflow.com/a/11689804/938089?after-calling-chrome-tabs-query-the-results-are-not -доступный). Он следует той же структуре, что и ваш код, поэтому вам должно быть легко быстро перейти. –
Я мог бы заметить, что ни одно из этих решений не выполняет то, что задает ОП ... и это должно было «переместить» переменную в глобальную область. Все эти ответы только присваивают значение другой переменной уже в глобальной области действия, а не переносят исходную переменную в глобальную область ... jus say'n;) – Epiphany