Compartir datos entre los controladores AngularJS pero los datos compartidos provienen de una llamada Ajax

Descubrí cómo compartir datos entre dos controladores AngularJS usando un servicio compartido en el siguiente ejemplo:

(Marchaviolín)

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'];

Mi problema es que me gustaría que los datos mantenidos enUserData para venir de una llamada Ajax (probablemente usando$http).

Intenté hacer la llamada Ajax en elUserData función de fábrica pero, ya que se ejecuta de forma asíncrona,MainCtrl yJobListCtrl son ejecutados antes de laUserData El servicio realmente tiene datos en él.

¿Alguien puede darme alguna dirección sobre cómo configurar eso?

Respuestas a la pregunta(2)

Su respuesta a la pregunta