私はangularjsで$ http約束になると問題があります。私は私のサービスでこれをやっています:(getSomething関数は2つの約束を結ぶべきです)
2番目の関数は外部コールバック関数を使います!
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; }; });
私は私のコントローラでサービスを利用する場合、それは出力にconsole.logません:、 i「はcompactData」を自分でコールバック関数を定義した場合、それは動作します:
blubb.getSomething(uri, input).then(function(data) { console.log(data) });
編集を私はhttps://raw.github.com/digitalbazaar/jsonld.js/master/js/jsonld.jsから "jsonld.compact"を使用していますが、これは機能しません!
jsonld.compact(input, context, function(err, compacted) { if(!err) { console.log(compacted); deferred.resolve(compacted); } else { deferred.reject('JSON-LD compacting'); } });
私はjsonld.compactではconsole.log出力を取得していますが、解決には動作しませんし、それだけで$ rootScopeで動作する理由..
私は知りません。$延期(適用されます.resolve(compacted));
でそれを使用する; ''延期します.resolve( "compacted"); '、おそらくは' err'と同じです。 –
sry、 'compacted'と' err'はコールバック関数で定義されています!この関数には 'console.log(compacted)'から正しい出力がありますが、 '連鎖' getSomething関数には出力されません。 –
それでも動作しない場合は、 'blubb.getSomething()'をテストする前に、 'blubb.getData()'と 'blubb.compactData()'を別々にテストしてください。 –