使用拦截器的每个请求的HTTP测量时间

时间:2016-04-13 08:47:11

标签: javascript angularjs

我正在尝试在我的应用程序中测量http请求的时间。因为我应该在全球范围内完成,我想使用拦截器。

我创建了一个可以记录每个请求的开始时间和结束时间的文件:

app.factory('httpTimeInterceptor', [function() {

var start;

return {
  request: function(config) {
    start = new Date();
    console.log("START",start);
    return config;
  },
  response: function(response) {
    console.log("START",start);
    var date = new Date();
    console.log("END",date);
    return response;
  }
};
}])

这会将三个值记录到控制台:我的请求的开始时间,然后再次开始时间和结束时间(当请求结束时)。
当我做多个请求时(第一次结束前第二次启动),我的问题就开始了。在这种情况下,我的start变量会被新值覆盖。

问题是我的拦截器是工厂所以它是一个单身人士(如果我错了请纠正我。)

我可以修改我的代码以轻松获取每个请求的实际时间吗? 我正在考虑创建将为每个请求保存密钥的数组,当它结束时,我将能够从该数组(字典)获取开始时间,但我不知道如何在request中识别相同的请求和response函数。

也许我正在尝试做更简单,更简单的解决方案?

1 个答案:

答案 0 :(得分:3)

您可以将开始时间存储在传递给config函数的request对象上。此对象在response拦截器中以response.config的形式提供。请务必选择一个尚未used by Angular的唯一属性名称。