我有一个带有功能的角度服务:
service.getItemByID = function(id) {
var hp = $http({method: "GET", url: "service/open/item/id",
headers: {"token": $rootScope.user.token},
params: {"id": id}});
return hp;
};
我需要在发送它们之前操纵返回的值,并且我希望保持HttpPromise结构完整,因为编写控制器代码以期望HttpPromise的成功和失败功能存在。
我已将服务改写为如下所示:
service.getItemByID = function(id) {
var hp = $http({method: "GET", url: "service/open/item/id",
headers: {"token": $rootScope.user.token},
params: {"id": id}});
var newHP = hp.success(
function(data, status, headers, config) {
data.x = "test"; //TODO: add full manipulation
alert("success");
return hp;
});
return newHP;
};
无论我是返回hp还是newHP,此代码都可以正常工作。我的问题是: 这是HttpPromise链接的正确形式吗?
答案 0 :(得分:1)
调用.success
会返回调用它的相同延迟对象。它不会创建新对象。它所做的就是在延迟上注册success
回调。
您可以使用新参考,或只保留旧参考:
service.getItemByID = function(id) {
var hp = $http({method: "GET", url: "service/open/item/id",
headers: {"token": $rootScope.user.token},
params: {"id": id}});
hp.success(
function(data, status, headers, config) {
data.x = "test"; //TODO: add full manipulation
alert("success");
return hp;
});
return hp;
};
如果您愿意,可以将它们全部链接起来,并直接返回延迟对象:
service.getItemByID = function(id) {
return $http({
method: "GET",
url: "service/open/item/id",
headers: {"token": $rootScope.user.token},
params: {"id": id}
})
.success(function(data, status, headers, config) {
data.x = "test";
alert("success");
});
};