0

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

但是有一种情况是多个相同的请求被触发,并且请求同时被触发,所以缓存似乎也不起作用。我希望对于重复请求,它应该发送先前请求的承诺。

还有很多服务,所以对每项服务添加承诺是行不通的。是否有任何地方可以处理重复请求并在一个共同的地方传递先前的请求承诺。可能是通过使用装饰器或 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);
                                })
                            });
                        };
4

1 回答 1

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;
          }
        )
    }
  }
于 2017-12-04T11:08:40.437 回答