我想为我的http请求创建一个缓存,所以我想复制$ http回调。
这是我的功能:
function getData() {
if(cacheExists()) {
return cache;
}
return $http({
method: 'POST',
url: 'http://something.com',
params: {something}
});
}
这就是我处理它的方式:
getData()
.success(function(data) {
$scope.spot = data.data;
console.log($scope.spot);
}).error(function(data) {
console.log('error');
});
这将与angularjs $ http方法完美配合, 但是不能用我的“缓存”,因为“缓存”应该有那些回调:成功&错误,我该如何创建它们?
答案 0 :(得分:4)
因为$ http返回一个promise。您可以使用$ q服务解决此问题,并将缓存作为承诺返回。
//inject $q
function getData() {
var deffered = $q.defer()
if(cacheExists()) {
deffered.resolve(cache);
} else {
$http({
method: 'POST',
url: 'http://something.com',
params: {something}
})
.success(function(data) {
deffered.resolve(data);
})
.error(function(response) {
deffered.reject(response);
})
}
return deffered.promise;
}
所以这里发生了什么,你正在创造“deffered”作为承诺。 Promise基本上是一种处理异步任务的方法。当你得到一个承诺,你需要解决它,就像你从http调用返回值。但是,如果使用$ q deffered,则使用'then'而不是'success'。请考虑以下代码段:
getData()
.then(function(data) {
$scope.spot = data.data;
console.log($scope.spot);
})
希望这有帮助。
<强>更新强> 例如,通过处理错误,你可以这样做:
getData()
.then(function(data) {
if(data.data) {
$scope.spot = data.data;
console.log($scope.spot);
} else {
console.log("its an err");
}
});
或者这个
getData()
.then(successCallback, errorCallback);
function successCallback(data) {
$scope.spot = data.data;
console.log($scope.spot);
}
function errorCallback() {
console.log("its an err");
}