ho problemi quando si tratta di $ http promises in angularjs. lo sto facendo nel mio servizio: (la funzione getSomething dovrebbe concatenare due promesse)
la seconda funzione utilizza una funzione di richiamata esterna!
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; }; });
quando uso il servizio nel mio controller non emettere il console.log:
blubb.getSomething(uri, input).then(function(data) { console.log(data) });
edit: se definisco la funzione di callback da solo in 'compactData' funziona, ma sto usando "jsonld.compact" da https://raw.github.com/digitalbazaar/jsonld.js/master/js/jsonld.js e QUESTO non funziona!
jsonld.compact(input, context, function(err, compacted) { if(!err) { console.log(compacted); deferred.resolve(compacted); } else { deferred.reject('JSON-LD compacting'); } });
sto ottenendo l'uscita console.log nel jsonld.compact ma la determinazione non funziona e non so perchè ..
funziona solo con $ rootScope. Applicare $ (differita .resolve (compattato));
A meno che 'compacted' è definita da qualche parte e si trova nella portata, allora probabilmente si desidera modificare' deferred.resolve (compattato); 'a' differita .resolve ("compattato"); ', e probabilmente lo stesso per' err'. –
sry, 'compacted' e' err' sono definiti dalla funzione di callback! c'è anche l'output corretto da 'console.log (compattato)' in questa funzione, ma non nella funzione getSomething 'concatenata'. –
Se ancora non funziona, testare 'blubb.getData()' e 'blubb.compactData()' separatamente prima di testare 'blubb.getSomething()'. –