t-comm
Version:
专业、稳定、纯粹的工具库
94 lines (87 loc) • 4.42 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
var _createClass = require('@babel/runtime/helpers/createClass');
var cocos_network_config = require('../../config.js');
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);
/**
* 归一化响应码/文案拦截器
*
* - ret / r 统一为 r
* - err_desc / err_msg 统一成 msg(URL decode + 去 +)
* - r=100000(NeedLogin)清空 msg(由 decorator 负责重试,不 toast)
* - r=100006(AccessDenied)清空 msg + 触发业务方注入的 onAccessDenied 回调
*
* 参考 pmd-npm/packages/business/src/network/interceptor/response/common/normalizeResponseRetInterceptor.ts
*/
var NormalizeResponseRetInterceptor = /*#__PURE__*/function () {
function NormalizeResponseRetInterceptor(options) {
_classCallCheck__default["default"](this, NormalizeResponseRetInterceptor);
this.options = options;
}
return _createClass__default["default"](NormalizeResponseRetInterceptor, [{
key: "interceptor",
value: function interceptor(param) {
var _a, _b, _c, _d, _e, _f;
var data = (_a = param.response) === null || _a === void 0 ? void 0 : _a.data;
if (data && data.r === undefined) {
if (data.ret === undefined || data.ret === null) {
data.r = 0;
} else {
data.r = data.ret;
}
}
// err_desc / err_msg 归一成 msg
if (data && !data.msg && data.err_desc && data.err_desc !== '') {
data.err_desc = String(data.err_desc).replace(/\+/g, ' ');
try {
data.msg = decodeURIComponent(data.err_desc);
} catch (_g) {
data.msg = data.err_desc;
}
} else if (data && !data.msg && data.err_msg && data.err_msg !== '') {
try {
data.msg = decodeURIComponent(data.err_msg);
} catch (_h) {
data.msg = data.err_msg;
}
} else if (data === null || data === void 0 ? void 0 : data.msg) ; else if (data && +data.r !== 0) {
data.msg = "\u8BF7\u6C42\u5F02\u5E38\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5\uFF08#".concat(data.r, "\uFF09");
}
// 需要登录的错误,去掉 toast 文案(由 decorator 处理重试)
if (data && +data.r === cocos_network_config.NEED_LOGIN_RET) {
data.msg = '';
(_c = (_b = this.options) === null || _b === void 0 ? void 0 : _b.loginMp) === null || _c === void 0 ? void 0 : _c.call(_b);
}
// 访问被拒的错误(ret=100006),清空 msg 避免兜底 toast,
// 由业务方注入的 onAccessDenied 决定后续动作(典型场景:跳 H5 申请页 / 弹原生 modal / 重启小游戏等)
if (data && +data.r === cocos_network_config.ACCESS_DENIED_RET) {
data.msg = '';
var cb = (_d = this.options) === null || _d === void 0 ? void 0 : _d.onAccessDenied;
if (typeof cb === 'function') {
try {
// 异步执行,框架不阻塞响应链;异常也吃掉避免影响业务方
// (onAccessDenied 通常是 IO 调用,业务方自己 try/catch)
var ret = cb(param);
if (ret && typeof ret.then === 'function') {
(_f = (_e = ret)["catch"]) === null || _f === void 0 ? void 0 : _f.call(_e, function (e) {
// eslint-disable-next-line no-console
console.warn('[pmd-api-cocos/network] onAccessDenied rejected:', e);
});
}
} catch (e) {
// eslint-disable-next-line no-console
console.warn('[pmd-api-cocos/network] onAccessDenied threw:', e);
}
} else {
// eslint-disable-next-line no-console
console.warn("[pmd-api-cocos/network] \u6536\u5230 r=".concat(cocos_network_config.ACCESS_DENIED_RET, "\uFF08\u8BBF\u95EE\u88AB\u62D2\uFF09\u4F46\u672A\u6CE8\u5165 onAccessDenied \u56DE\u8C03\uFF0C") + '请在 initCocosNetwork({ onAccessDenied }) 中配置(如打开 H5 申请页)。');
}
}
return [false, param];
}
}]);
}();
exports.NormalizeResponseRetInterceptor = NormalizeResponseRetInterceptor;