0

我有一个带有功能的角度服务:

    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 链接的正确形式吗?

4

1 回答 1

1

调用.success返回与调用它相同的延迟对象。它不会创建新对象。它所做的只是success在 deferred 上注册一个回调。

您可以使用新的参考,或者只保留旧的参考:

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");
    });
};
于 2013-09-03T17:30:55.257 回答