Введение решенного обещания в сервис
Мне нужно получить некоторую информацию (схему) с сервера, прежде чем я настрою группу сервисов, которые зависят от этой информации.
Мой сервер предоставляет схему, которая определяет различные свойства модели. В моем угловом коде у меня есть сервис, который получает эту схему:
services.factory('schema', function($q, $http) {
var deferred = $q.defer();
$http.get('schema/').then(function(response) {
schema = // some function of response.data
deferred.resolve(schema);
}, function() {
deferred.reject('There was a problem fetching the schema');
});
return deferred.promise;
});
Я хотел бы внедрить объект схемы, а не обещание, в другие службы, которые зависят от схемы. $ routeProvider позволяет нам сделать это для контроллеров:
app.config(function($routeProvider) {
$routeProvider.
when('/', {
controller: 'SomeCtrl',
resolve: {
schema: 'schema'
},
...
});
});
и это позволяет мне определить SomeCtrl следующим образом:
controllers.controller('SomeCtrl', function($scope, schema) {
// schema is an object
...
});
Но для услуг я должен сделать:
services.factory('SomeService', function(schema) {
// schema is a promise
schema.then(function(schema) {
...
});
});
Есть ли способ, которым я могу сделать это?