当谈到
angularjs中的$http承诺时,我遇到了问题.我在我的服务中这样做:( getSomething函数应链接两个promise)
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:
blubb.getSomething(uri,input).then(function(data) { console.log(data) });
编辑:
如果我自己在’compactData’中定义回调函数它可以工作,但我使用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.$apply(deferred.resolve(compacted));
我正在使用这样的链接承诺:
$http.get('urlToGo') .then(function(result1) { console.log(result1.data); return $http.get('urlToGo'); }).then(function(result2) { console.log(result2.data); return $http.get('urlToGo'); }).then(function(result3) { console.log(result3.data); });