I need to get feed using $http.jsonp after that I return deferred.resolve(feed) which should pass feed value to chained function EntryStateUrlService.getEntryStateUrl.
For some reason it says FeedService.parseFeed(feedSrc) evaluated as undefined therefore then() method cannot be invoked on undefined. How to fix it?
app.service('LoadData', ['FeedService', 'EntryStateUrlService', '$q', function(FeedService, EntryStateUrlService, $q) {
var deferred = $q.defer();
this.loadData = function(feedSrc) {
FeedService.parseFeed(feedSrc).then(EntryStateUrlService.getEntryStateUrl).then(function(urls) {
$rootScope.links = urls;
});
}
}]); //TypeError: undefined is not a function
app.service('FeedService', function($http, $q) {
var deferred = $q.defer();
this.parseFeed = function(url) {
$http.jsonp('//ajax.googleapis.com/ajax/services/feed/load?v=1.0&callback=JSON_CALLBACK&q=' + encodeURIComponent(url))
.success(function(res) {
deferred.resolve(res.data.responseData.feed.entries); //TypeError: Cannot read property 'responseData' of undefined
}).error(function() {
deferred.reject();
});
return deferred.promise(); //TypeError: object is not a function
}
});
app.service('EntryStateUrlService', ['$state', '$q', function($state, $q) {
var deferred = $q.defer();
this.getEntryStateUrl = function(feeds) {
var idx = 0;
feeds.forEach(function(e) {
$http.jsonp(e.link).success(function(data) {
/*stuff*/
deferred.resolve('root.' + generatedStateName);
});
}); //forEach
} //getEntryStateUrl
return deferred.promise();
}]); //EntryStateUrlService
UPDATE
After adding return deferred.promise(); both to EntryStateUrlService and FeedService I am getting TypeError: object is not a function for return deferred.promise(); in FeedService.