当谈到 angularjs 中的 $http 承诺时,我遇到了问题。我在我的服务中这样做:(getSomething 函数应该链接两个承诺)
第二个函数使用外部回调函数!
app.service('blubb', 函数($http, $q) {
变种自我=这个;
this.getSomething = 函数(uri,数据){
返回 self.getData(uri).then(function(data2) {
返回 self.compactData(uri, data2);
});
};
this.getData = 函数(uri){
var deferred = $q.defer();
$http.get(uri).success(函数(数据) {
deferred.resolve(数据);
}).error(函数() {
deferred.reject();
});
返回 deferred.promise;
};
this.compactData = 函数(uri,数据){
var deferred = $q.defer();
/* 回调函数 */
如果(!错误){
console.log(压缩);
deferred.resolve(压缩);
} 别的 {
控制台日志(错误);
deferred.reject(err);
}
/* 函数结束 */
返回 deferred.promise;
};
});
当我在控制器中使用该服务时,它不会输出 console.log:
blubb.getSomething(uri, input).then(function(data) {
控制台日志(数据)
});
编辑:如果我自己在“compactData”中定义回调函数,它可以工作,但我使用的是来自https://raw.github.com/digitalbazaar/jsonld.js/master/js/jsonld.js的“jsonld.compact”这不起作用!
jsonld.compact(输入,上下文,函数(错误,压缩){
如果(!错误){
console.log(压缩);
deferred.resolve(压缩);
} 别的 {
deferred.reject('JSON-LD 压缩');
}
});
我在 jsonld.compact 中获得了 console.log 输出,但解析不起作用,我不知道为什么..
它仅适用于 $rootScope.$apply(deferred.resolve(compacted));