Compartilhamento de dados entre os controladores AngularJS, mas os dados compartilhados são provenientes de uma chamada Ajax

Eu descobri como compartilhar dados entre dois controladores AngularJS usando um serviço compartilhado no exemplo inventado abaixo:

(Funcionamentoviolino)

var app = angular.module('myApp', []);

app.factory('UserData', function() {
    var data = {foo: 'bar'};

    return {
        getData: function() {
            console.log('getData');
            return data;
        },
        setData: function(newData) {
            data = newData;
        }
    };
});

function MainCtrl($scope, UserData) {
    console.log('MainCtrl');
    console.log(UserData.getData());
}
MainCtrl.$inject = ['$scope', 'UserData'];

function JobListCtrl($scope, UserData) {
    console.log('JobListCtrl');
    console.log(UserData.getData());
}
JobListCtrl.$inject = ['$scope', 'UserData'];

Meu problema é que eu gostaria que os dados contidosUserData vir de uma chamada Ajax (presumivelmente usando$http).

Eu tentei fazer a chamada Ajax noUserData função de fábrica, mas, como ele está sendo executado de forma assíncrona,MainCtrl eJobListCtrl são executados antes doUserData serviço realmente tem quaisquer dados nele.

Alguém pode me dar alguma orientação sobre como configurar isso?

questionAnswers(2)

yourAnswerToTheQuestion