如何正确链接Angular HttpPomise

时间:2013-09-03 17:21:51

标签: javascript angularjs

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

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

1 个答案:

答案 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");
    });
};