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

标签 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 变量将被新值覆盖。

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

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

对于我想做的事情,也许有更简单的解决方案?

最佳答案

您可以将开始时间存储在传递给 request 函数的 config 对象上。该对象在 response 拦截器中作为 response.config 提供。确保选择一个尚未出现的唯一属性名称 used by Angular .

关于javascript - HTTP 使用拦截器测量每个请求的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36593117/

相关文章:

javascript - 无法在 AngularJS 中以 HTML5 模式切换 View

javascript - 从 Angular 侧的nodejs读取cookie

javascript - 检测当前是否在 Android 上滚动网页

javascript - 原语上的 isPrototypeOf() 函数

javascript - 使用 babel-preset-env 禁用 promise 转译?

javascript - 在 JavaScript 中递增 ISO 日期字符串(例如 '2014-03-30' -> '2014-03-31' )

javascript - 如何在循环内增加计数值

javascript - 避免 ng view 渲染的页面出现难看的图片加载效果

angularjs - 如何让我的文本根据 http 请求的结果不断更改,直到满足结束条件?

javascript - Angularjs:如何根据数据属性值查找元素?