t-comm
Version:
专业、稳定、纯粹的工具库
48 lines (41 loc) • 2.18 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
var _createClass = require('@babel/runtime/helpers/createClass');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
/**
* Aegis 上报专用:请求打点拦截器
*
* - 业务:在「请求拦截器链」最前面加本拦截器,把 `Date.now()` 注入到 `param.__aegisStartTime`
* - 配合 `AegisReportInterceptor`(响应拦截器)使用,能算出精确耗时 duration
*
* 设计原因:
* - `NetworkEngine` 用 reduce 串成 Promise 链,**响应拦截器拿不到「请求发起时刻」**
* - 只有显式在请求链里打点,响应拦截器才能 `Date.now() - startTime` 算耗时
* - 字段名带双下划线前缀(`__aegisStartTime`),与 `IRawRequest.__cocosOriginUrl` 一致风格,
* 不会和业务 reqData / header 冲突
*
* 注意:
* - 该拦截器不应该被排在 `CocosHostInterceptor` 之前:domain 拼接后才算真正发起,
* 但 Aegis 关心的是「业务调用时点」,所以其实放在最前更准确;放哪都行,只要 startTime 字段在
* 请求链中能透传到响应拦截器
* - 本拦截器是 **幂等** 的:若上游拦截器已注入过 startTime,就保留上游值不覆盖
* (防重入 / 装饰器场景下开始时间被推迟)
*/
var AegisStartTimeInterceptor = /*#__PURE__*/function () {
function AegisStartTimeInterceptor() {
_classCallCheck__default["default"](this, AegisStartTimeInterceptor);
}
return _createClass__default["default"](AegisStartTimeInterceptor, [{
key: "interceptor",
value: function interceptor(param) {
if (typeof param.__aegisStartTime !== 'number') {
param.__aegisStartTime = Date.now();
}
return [false, param];
}
}]);
}();
exports.AegisStartTimeInterceptor = AegisStartTimeInterceptor;