根据来自单个HTTP请求

时间:2015-08-05 16:25:16

标签: angularjs angular-promise

我希望实现一项具有以下功能的服务:

  • 仅对给定资源执行一次HTTP请求。
  • 提供两个导出函数,每个函数都返回一个promise,其中promise基于来自一次性HTTP调用的数据来解析。

应存在两个函数以提供所获取数据的不同表示。

到目前为止,我的服务大纲如下:

angular.module('someApp')
.service('someService', function ($http) {

    var httpPromise = $http.get('/some/endpoint/').then(
            function(response) {
                // HTTP response data is processed
            });

    this.getSomePromise = function() {
        // Return a promise which is resolved using one representation of HTTP response
    }

    this.getAnotherPromise = function() {
        // Return a promise which is resolved using another representation of HTTP response
    }

});

如果只需要一个'getter'功能,那么显然我可以简单地返回httpPromise

如图所示,实现界面的适当方法是什么?两个或更多消费者是否有可能在同一个承诺上调用.then(),在这种情况下,我只能从这两个函数返回httpPromise.then(function(){...modify data...})?或者,在这种情况下是否有必要创建一个新的promise(使用$q.defer())并根据保存HTTP响应的缓存对象以某种方式解决它?

1 个答案:

答案 0 :(得分:0)

您可以在http承诺上使用链接简单地创建两个承诺:

var httpPromise = $http.get('/some/endpoint/');

var firstPromise = httpPromise.then(function(response) {
    return firstTransformation(response.data);
});

var secondPromise = httpPromise.then(function(response) {
    return secondTransformation(response.data);
});

this.getSomePromise = function() {
    return firstPromise;
}

this.getAnotherPromise = function() {
    return secondPromise;
}