gpt4 book ai didi

angularjs - 使用带有 angular 的 $q 服务

转载 作者:行者123 更新时间:2023-12-04 06:29:46 25 4
gpt4 key购买 nike

我仍然无法理解使用 $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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com