基于this answer我正在尝试创建一个服务,即使请求未成功但超时也会返回数据。
this.getStatus = function()
{
var timeoutPromise = $timeout(function () {
canceler.resolve();
console.log("Timed out");
},250);
var canceler = $q.defer();
$http.get("data.js", {timeout: canceler.promise} ).success(function(data){
console.log(data);
$timeout.cancel(timeoutPromise);
return data;
});
};
这是带有$http
请求的服务的名称
var promises = [
firstService.getStatus(),
secondService.getStatus(),
thirdService.getStatus()
];
$q.all(promises)
.then(function (serviceResults) {
//process Data in case of success
console.log("Result First Service: "+ serviceResults[0]);
console.log("Result Second Service: "+ serviceResults[1]);
console.log("Result third Service: "+ serviceResults[2]);
})
.catch(function() {
//process Mock data in case of Failure
});
如果请求成功,它应返回响应中的数据,如果超时,则返回一些占位符数据 那么如果请求超时,如何返回数据呢?
答案 0 :(得分:0)
你可以:
this.getStatus = function() {
var deferred = $q.defer();
var timeoutPromise = $timeout(function () {
deferred.resolve(
// MOCKED DATA HERE
);
console.log("Timed out");
}, 250);
$http.get("data.js", {timeout: canceler.promise} ).then(function(data){
$timeout.cancel(timeoutPromise);
deferred.resolve(data);
}).catch(deferred.reject);
return deferred.promise;
};
这样,如果请求成功,它将使用响应数据解析。如果超时,它将使用模拟数据解析。如果在超时之前发生了另一个错误,它会拒绝带有响应错误的promise。