Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   chrome.storage вопрос про callback'и (https://javascript.ru/forum/css-html-browser/77431-chrome-storage-vopros-pro-callback%27i.html)

Leoterno 02.05.2019 17:15

chrome.storage вопрос про callback'и
 
Обычное дело. Пишу расширение для Хрома, однако до этого на JS ничего не писал. Поэтому сталкиваюсь с особенностями языка.
Использую хромовское хранилище, а API хрома работает асинхронно, в следствии чего алерт срабатывает ещё до того, как в переменную запишется значение (Если я правильно всё понимаю).

Нужно запихнуть значение этой структуры в переменную, что бы дальше с ней работать:

var valueStorage

function getStorage() {
	chrome.storage.local.get(['key'], function(result) {
		console.log('Value currently is ' + result.key);
		valueStorage = result.key;
	});
}

getStorage();
alert (valueStorage);


Вроде бы почитал про кэллбеки. И посмотрел на похожие проблемы. Всё таки вопрос заезженный. Но видимо мой мозг пэхапэшника отказывается воспринимать происходящее и я не могу никак подставить примеры под свою ситуацию.
Ну ткните носом, пожалуйста, как правильно обернуть, что бы выполнилось всё последовательно. Что б алерт сработал уже после записи в переменную. И что б дальше в коде я мог спокойно использовать эту переменную вне всяких функций.

Nexus 02.05.2019 20:12

Цитата:

Сообщение от Leoterno
И что б дальше в коде я мог спокойно использовать эту переменную вне всяких функций.

Не проще тогда в callback'е и писать код?

chrome.storage.local.get(['key'], function(result) {
    console.log('Value currently is ' + result.key);
    var valueStorage = result.key;

    alert(valueStorage);
    //do something else
});

Leoterno 02.05.2019 21:20

Спасибо за ответ. Да, сделал, работает. Думаю, это именно то, что мне нужно. Всё это странно, но с более изящными способами пока не хочу даже заморачиваться.

Aetae 02.05.2019 23:17

>Вне всяких функций
Вот об этом забудь в js. Тут исполнение перетекает из функции в функцию из метода в метод.
Даже если обернуть в промис и заюзать await - всё равно придётся код обернуть в async функцию.


Часовой пояс GMT +3, время: 08:52.