我正在尝试测量应用程序中 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/