fix(axios): 修复封装的axios请求过快beforeRequestCallback,beforeResponseCallback只触发一次 (#84)

This commit is contained in:
hb0730 2021-10-30 13:56:42 +08:00 committed by GitHub
parent 72224717f9
commit 8ffd341443
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -41,12 +41,6 @@ class EnclosureHttp {
// 记录当前这一次cancelToken的key // 记录当前这一次cancelToken的key
private currentCancelTokenKey = ""; private currentCancelTokenKey = "";
private beforeRequestCallback: EnclosureHttpRequestConfig["beforeRequestCallback"] =
undefined;
private beforeResponseCallback: EnclosureHttpRequestConfig["beforeResponseCallback"] =
undefined;
public get cancelTokenList(): Array<cancelTokenType> { public get cancelTokenList(): Array<cancelTokenType> {
return this.sourceTokenList; return this.sourceTokenList;
} }
@ -126,8 +120,8 @@ class EnclosureHttp {
this.cancelRepeatRequest(); this.cancelRepeatRequest();
this.currentCancelTokenKey = cancelKey; this.currentCancelTokenKey = cancelKey;
// 优先判断post/get等方法是否传入回掉否则执行初始化设置等回掉 // 优先判断post/get等方法是否传入回掉否则执行初始化设置等回掉
if (typeof this.beforeRequestCallback === "function") { if (typeof config.beforeRequestCallback === "function") {
this.beforeRequestCallback($config); config.beforeRequestCallback($config);
return $config; return $config;
} }
if (EnclosureHttp.initConfig.beforeRequestCallback) { if (EnclosureHttp.initConfig.beforeRequestCallback) {
@ -158,20 +152,21 @@ class EnclosureHttp {
const instance = EnclosureHttp.axiosInstance; const instance = EnclosureHttp.axiosInstance;
instance.interceptors.response.use( instance.interceptors.response.use(
(response: EnclosureHttpResoponse) => { (response: EnclosureHttpResoponse) => {
const $config = response.config;
// 请求每次成功一次就删除当前canceltoken标记 // 请求每次成功一次就删除当前canceltoken标记
const cancelKey = EnclosureHttp.genUniqueKey(response.config); const cancelKey = EnclosureHttp.genUniqueKey($config);
this.deleteCancelTokenByCancelKey(cancelKey); this.deleteCancelTokenByCancelKey(cancelKey);
NProgress.done();
// 优先判断post/get等方法是否传入回掉否则执行初始化设置等回掉 // 优先判断post/get等方法是否传入回掉否则执行初始化设置等回掉
if (typeof this.beforeResponseCallback === "function") { if (typeof $config.beforeResponseCallback === "function") {
this.beforeResponseCallback(response); $config.beforeResponseCallback(response);
this.beforeResponseCallback = undefined;
return response.data; return response.data;
} }
if (EnclosureHttp.initConfig.beforeResponseCallback) { if (EnclosureHttp.initConfig.beforeResponseCallback) {
EnclosureHttp.initConfig.beforeResponseCallback(response); EnclosureHttp.initConfig.beforeResponseCallback(response);
return response.data; return response.data;
} }
NProgress.done();
return response.data; return response.data;
}, },
(error: EnclosureHttpError) => { (error: EnclosureHttpError) => {
@ -209,12 +204,6 @@ class EnclosureHttp {
...axiosConfig ...axiosConfig
} as EnclosureHttpRequestConfig); } as EnclosureHttpRequestConfig);
// 单独处理自定义请求/响应回掉 // 单独处理自定义请求/响应回掉
if (axiosConfig?.beforeRequestCallback) {
this.beforeRequestCallback = axiosConfig.beforeRequestCallback;
}
if (axiosConfig?.beforeResponseCallback) {
this.beforeResponseCallback = axiosConfig.beforeResponseCallback;
}
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
EnclosureHttp.axiosInstance EnclosureHttp.axiosInstance
.request(config) .request(config)