$ http同时重复API调用,返回承诺

时间:2017-12-04 10:17:25

标签: javascript angularjs http angular-http-interceptors angular-cache

在我的应用中,我们使用微服务结构,为此我们添加了缓存。

但是有一种场景,其中多个相同的请求被触发,并且请求同时被触发,因此缓存似乎也不起作用。 我想要重复请求它应该发送先前请求的承诺。

此外还有很多服务,因此为每项服务添加承诺是行不通的。是否有任何地方可以处理重复请求并在公共场所传递先前的请求承诺。可能是使用装饰器或http拦截器。

服务电话

testService.getTestByIds = function (
                                testIds,
                                contextInfo) {
         var params = {
                 testId: requestDefinitionIds
           };
         params = CommonProvider.apppendContextParams(contextInfo, params,testInfoCache);
          return $http.get(SERVICE_URL + 'tests', {
                                cache: testInfoCache,
                                params: params,
                                transformResponse: CommonProvider.appendTransformer($http.defaults.transformResponse, function (value) {
                                    return transformTestResponse(value);
                                })
                            });
                        };

1 个答案:

答案 0 :(得分:0)

我认为你的意思是在客户端缓存,你可以尝试这样的事情:

const activeRequest = 
  () => {
    const requests = {};
    return (url,params) => {
      const promise = requests[url+JSON.stringify(params)];
      if(promise){
        return promise;
      }
      return requests[url+JSON.stringify(params)] = 
        //not sure what you use for angular, maybe $http for angular1
        fetch(url,params)
        .then(
          x=>{
            requests[url+JSON.stringify(params)] = undefined;
            return x;
          }
        )
    }
  }