我仍然无法理解使用 $q 服务的作用,(它究竟会添加什么)如果你想创建一个只需要通过 http 调用一个 API 的服务,在这种情况下我不知道为什么应该'我只是执行以下操作(不使用 $q):
this.getMovie = function(movie) {
return $http.get('/api/v1/movies/' + movie)
.then(
function(response) {
return {
title: response.data.title,
cost: response.data.price
});
},
function(httpError) {
// translate the error
throw httpError.status + " : " +
httpError.data;
});
};
最佳答案
非常好的问题,很少有人喜欢回答。
考虑一下:
this.getMovie = function(movie) {
return $http.get('/api/v1/movies/' + movie);
};
伟大的代码,但这些规则适用:
$http 将解析 2xx 响应,否则将拒绝。有时我们不想要这个。我们想拒绝决议并解决拒绝。当您考虑 HEAD 请求来检查某物的存在时,这是有道理的。
对
/book/fred
的 HEAD 请求返回 200 表明书 fred 存在。但是如果我的函数是测试 book fred 是否唯一,它不是,所以我们想拒绝 200。这就是 $q 的用武之地。现在我可以这样做:var defer = $q.defer();
$http.head('/book/fred').then(function(response) {
// 2xx response so reject because its not unique
defer.reject(response);
}).catch(function(failResponse) {
defer.resolve(failResponse);
});
return defer.promise;
$q 让我完全控制何时拒绝和何时解决。
此外, $q 允许我拒绝或解决任何值。因此,如果我只对某些响应感兴趣,我可以只用我感兴趣的部分来解决。
最后,我可以使用 $q 将基于非 promise 的代码转换为 promise 。
var a = 5;
var b = 10;
var defer = $q.defer();
var resolve(a+b);
return defer.promise;
波什,如果我需要一个 promise 作为我的返回值,那么我有一个。
这在模拟单元测试时也很棒。
关于angularjs - 使用带有 angular 的 $q 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36365583/