Обещание AngularJS выполняется до загрузки данных
В моем приложении я должен получить некоторые данные JSON и назначить их массиву до загрузки страницы. Это мой код для извлечения JSON с помощью сервиса CardService:
cards = [];
var cs = {
...
fetchCards: function() {
var d = $q.defer();
$http.get("data/cards.php").success(function(data) {
cards = data;
d.resolve();
}).error(function(data, status) {
d.reject(status);
});
return d.promise;
},
getCards: function() { return cards; };
...
}
В контроллереS блок разрешения, у меня есть следующее:
WalletController.resolve = {
getCards: function(CardService) {
CardService.fetchCards().then(loadView, showError);
}
}
И в реальном контроллере у меня есть следующее:
function WalletController($scope, CardService) {
$scope.cards = CardService.getCards();
}
Проблема в том, что функция fetchCards в сервисе, кажется, разрешает обещание до того, как данные JSON будут назначены переменной cards. Это приводит к тому, что мой вид загружается с пустыми данными, пока я не обновлюсь пару раз и не получу удачу.
Я могу подтвердить позднюю загрузку, например, когда я регистрирую переменную cards в консоли, я получаю пустой массив в строке 122 (когда загружается мое представление) и полный массив в строке 57 (когда вызов JSON успешен). Линия 57 'с какой-то код выполняетпосле представление загружено.
Как это исправить?