Здравствуйте. Пытаюсь сделать браузерное расширение на angular. Но есть проблема с асинхронным получением данных.
В памяти браузера хранится ID пользователя. И это значение используется повсюду.
Вот простой пример:
angular.module('PopupApp', [])
.config(['$provide', function ($provide) {
console.log('.config');
$provide.value('ID',null);
chrome.storage.local.get('ID', function (stg) {
console.log('.config.chrome.storage.local.get');
console.log('.config.chrome.storage.local.get, ID:' + stg.ID);
$provide.value('ID',stg.ID);
});
}])
.run(['ID', function (ID) {
console.log('.run');
console.log('.run, ID:' + ID);
}])
.controller('MyCtrl', ['$scope', 'ID', function ($scope, ID) {
console.log('.controller');
console.log('.controller, ID:' + ID);
$scope.ID = ID;
}]);
В консоль выводится следующее:
.config
.run
.run, ID:null
.controller
.controller, ID:null
.config.chrome.storage.local.get
.config.chrome.storage.local.get, ID:123
Как видно, в секциях
run
и
controller
переменная
ID
пустая, потому, что в нее ещё не было установлено значение.
Как вариант решения - повсюду использовать callback функции, которые срабатывают после получения ID. Но я подумал, может есть более грамотное решение? Может как-то можно приостановить работу Angular (Чтобы запустилась секция
config
а все остальные запустились только после того, как будут получены данные)?