2015-05-18 2 views
0

Я хочу использовать данные, хранящиеся в одной службе, в другой службе.Угловой ввод в эксплуатацию (асинхронный) не работает

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

Что извлечения данных выглядит

app.factory('userService', ['$http', 'rootUserService', function ($http, rootUserService) { 
    var user = null; 
    var rootUser; 

    return { 
    getUser : function(userId) { 
     var that = this; 

     rootUserService.getUser().then(function(data) { 
     that.rootUser = data; 
     console.log(data) // working 
     }); 
     console.log(that.rootUser) // undefined 
     console.log(rootUser) // undefined 

     // Do some stuff with rootuser (another async call & compare users) 
    } 
    } 
}]); 

Где данные извлекаются из:

app.factory('rootUserService', ['$http', '$rootScope', function($http, $rootScope) { 
    var user = null; 
    return { 
    makeRequest: function(url) { 
     var that = this; 
     return $http.get(url).then(function (res) { 
     return res.data; 
     }); 
    }, 

    // This is what is used for retrieval 
    getUser: function() { 
     if(!this.user) { this.user = this.makeRequest('/api/user/get'); }; 
     return this.user; 
    } 
    } 
}]); 
+0

Используйте это в заводе '' UserService: rootUserService.getUser(), а затем (функция (данные) { console.log ('это работает?'); // Безразлично 't отображается в консоли. that.rootUser = data; }, function (err) {console.log (err);}); Укажите, как выглядит ошибка. –

+0

'' этот бег? '' А еще звонил ajax? – PSL

+0

@Stefan, никаких ошибок, он работает сейчас. @PSL, ajax действительно сделал это. Контекст вопроса немного изменился. См. 'GetUser' – dmr07

ответ

0

Метод GetUser() в службе должны вернуть обещание разрешить. . Что-то вроде этого:

app.factory('rootUserService', ['$http', '$rootScope', function($http, $rootScope) { 
    var user = null; 
    return { 
    makeRequest: function(url) { 
     var that = this; 
     return $http.get(url).then(function (res) { 
     return res.data; 
     }); 
    }, 

    // This is what is used for retrieval 
    getUser: function() { 
     if(!this.user) { 
     return this.makeRequest('/api/user/get').then(function(resp) { 
      this.user=data; 
      return data; 
     }); 
     }; 
     return this.user; 
    } 
    } 
}]); 

app.factory('userService', ['$http', 'rootUserService', function ($http, rootUserService) { 
    var user = null; 
    var rootUser; 

    return { 
    getUser : function(userId) { 
     var that = this; 

     return rootUserService.getUser().then(function(data) { 
     that.rootUser = data; 
     console.log(data) // working 
     // Do some stuff with rootuser (another async call & compare users) 
     //All of those actions MUST BE IN HERE 
     }); 
    } 
    } 
}]); 
Смежные вопросы