Mam problemy jeśli chodzi o obietnice $ http w angularjs. Robię to w mojej usłudze: (funkcja getSomething powinna wiązać obie obietnice)
druga funkcja korzysta z zewnętrznej funkcji oddzwaniania!
app.service('blubb', function($http, $q) { var self = this; this.getSomething = function(uri, data) { return self.getData(uri).then(function(data2) { return self.compactData(uri, data2); }); }; this.getData = function(uri) { var deferred = $q.defer(); $http.get(uri).success(function(data) { deferred.resolve(data); }).error(function() { deferred.reject(); }); return deferred.promise; }; this.compactData = function(uri, data) { var deferred = $q.defer(); /* callback function */ if(!err) { console.log(compacted); deferred.resolve(compacted); } else { console.log(err); deferred.reject(err); } /* end of function */ return deferred.promise; }; });
podczas korzystania z usługi w moim kontrolera to nie wyjście console.log:
blubb.getSomething(uri, input).then(function(data) { console.log(data) });
edit: gdybym zdefiniować funkcję zwrotną przez siebie w „compactData” działa ale używam "jsonld.compact" z https://raw.github.com/digitalbazaar/jsonld.js/master/js/jsonld.js i TO nie działa!
jsonld.compact(input, context, function(err, compacted) { if(!err) { console.log(compacted); deferred.resolve(compacted); } else { deferred.reject('JSON-LD compacting'); } });
Dostaję wyjście console.log w jsonld.compact ale postanowienie nie działa i nie wiem dlaczego ..
działa tylko z $ rootScope. $ Zastosowania (odroczony .resolve (zagęszczony));
ile 'compacted' jest zdefiniowana gdzieś i jest w zasięgu, to prawdopodobnie chcesz zmienić' deferred.resolve (ubity); 'na' odroczony .resolve ("compacted"); ', i prawdopodobnie tak samo dla' err'. –
sry, 'compacted' i' err' są zdefiniowane przez funkcję zwrotną! istnieje również prawy wynik z 'console.log (compacted)' w tej funkcji, ale nie w sprzężonej funkcji getSomething. –
Jeśli to nadal nie działa, przetestuj 'blubb.getData()' i 'blubb.compactData()' przed testowaniem 'blubb.getSomething()'. –