을 사용하여 피드를 가져와야합니다. deferred.resolve(feed)
을 반환해야 값을 체인화 된 함수 EntryStateUrlService.getEntryStateUrl
에 전달해야합니다.맺어진 약속을 수행 할 수 없습니다
어떤 이유에서인지 은 undefined
으로 평가되므로 undefined
에서 then()
메서드를 호출 할 수 없습니다. 그것을 고치는 방법?
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
EntryStateUrlService
및 FeedService
에 return deferred.promise();
을 모두 추가 한 후 나는 FeedService
에 return deferred.promise();
에 대한 TypeError: object is not a function
을 얻고있다.
[지연된 반 패턴] (http://stackoverflow.com/q/23803743/1048572)을 사용하지 마십시오! – Bergi