Передача данных между контроллерами в angular при ожидании обещания

Прямо сейчас я хочу иметь возможность установить некоторые данные для службы и получить данные на втором контроллере. Я увидел в своем отладчике, что код работает неправильно, потому что моя логика не асинхронна.

myApp.factory('Data', function($http) {

var storage;

this.callMe = function() {
    return $http.get("https://api.github.com");
};

this.getStorage = function() {
    return storage;
};

this.setStorage = function(v) {
    storage = v;  
};

return this;

});

function FirstCtrl($scope, Data, $q) {
Data.callMe().then(function(response) {
    $scope.data = response.data;
});
Data.setStorage($scope.data);
}

function SecondCtrl($scope, Data) {

var data = Data.getStorage();

}

У меня есть plnkr: http://plnkr.co/edit/0FicRx9FVJfeWFZhO4Ya?p=streamer

Я попытался использовать $q.defer, но не смог добиться желаемого эффекта.


person user1413969    schedule 06.10.2014    source источник
comment
Это точно такая же проблема - только в Angular - вы обязательно должны прочитать связанный вопрос. Надеюсь, это многое прояснит.   -  person Benjamin Gruenbaum    schedule 06.10.2014
comment
@BenjaminGruenbaum: я думал, что мы лучше закроем его как обман одного из этих вопросов о кэшировании обещаний, я только не смог найти правильный   -  person Bergi    schedule 06.10.2014
comment
@Bergi Берги, да, это, вероятно, правильный дубликат ... Текущий отмеченный дубликат на самом деле не тот, который соответствует контексту вопроса.   -  person PSL    schedule 06.10.2014
comment
@Bergi его проблема не в кэшировании обещания, а в понимании того, как асинхронное выполнение и параллелизм работают в JavaScript браузера. У него та же проблема, что и в разделе «Как вернуть ответ на вызов AJAX», и решение такое же. Хотя, если кто-то из вас найдет лучшего дуплика, будьте моим гостем - у вас обоих есть молотки :)   -  person Benjamin Gruenbaum    schedule 06.10.2014
comment
Вот демонстрация того, как вы можете кэшировать результат промиса: plnkr.co/edit/PjDChrmDUkLtHZUO46IT?p=preview   -  person dfsq    schedule 06.10.2014
comment
@BenjaminGruenbaum Я уверен, что у вас самих будут лучшие ответы, связанные с обещаниями, которые охватывают оба сценария :) Еще не видел лучших ответов от кого-либо еще .. : D   -  person PSL    schedule 06.10.2014
comment
@PSL Я ценю положительные отзывы и прилагаю много усилий. Я просто все еще не уверен, что какой-либо из моих ответов лучше объясняет основную проблему. Я подумал о добавлении второго ответа на Как вернуть ответ на вызов AJAX с использованием обещаний или задать аналогичный, но основанный на обещаниях вопрос о параллелизме JS, но я никогда не был удовлетворен результатами, и мне очень нравится ответ Феликса на этот вопрос. Я все для предложений, хотя.   -  person Benjamin Gruenbaum    schedule 06.10.2014