fix: 修复success/complete的时序问题 (#78)

This commit is contained in:
Ivin Wu
2023-06-27 18:53:31 +08:00
committed by GitHub
parent a8898b09e0
commit 0b837e88a3
9 changed files with 95 additions and 32 deletions

View File

@@ -482,4 +482,18 @@ weRequest.init({
}, },
// ... // ...
}) })
```
### 回调的success和complete的时序怎么和wx.request的时序不一致
早期请求库引入promise能力时由于代码缺陷导致success/complete执行的顺序与官方wx.request的success/complete执行顺序是相反的。正确的顺序应该是先执行success回调再执行complete回调
由于这个问题存在比较久且很细微,可能大部分业务在使用的时候也没有太留意。
请求库在`1.7.5`版本中对其进行了修复,但是为了不影响之前使用了本库的业务,所以增加了一个配置项`isFixSuccessCompleteTiming`,用于指定修复这个问题。
若不配置这个项,则仍保持这个错误的回调顺序,若业务希望顺序跟官方保持一致,则需要在初始化时配置这个配置项,示例如下:
```javascript
weRequest.init({
// ...
isFixSuccessCompleteTiming: true
// 省略其他配置项...
})
``` ```

View File

@@ -28,6 +28,7 @@ export interface IInitOption {
backupDomainList?: IAnyObject; backupDomainList?: IAnyObject;
backupDomainEnableCallback?: Function; backupDomainEnableCallback?: Function;
domainChangeTrigger?: Function; domainChangeTrigger?: Function;
isFixSuccessCompleteTiming: boolean;
} }
export interface ICodeToSessionOptions { export interface ICodeToSessionOptions {
url: string; url: string;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
{ {
"name": "we-request", "name": "we-request",
"version": "1.7.4", "version": "1.7.5",
"description": "本工具通过拓展小程序的wx.request让开发者通过简单的配置实现自动管理登录态等功能", "description": "本工具通过拓展小程序的wx.request让开发者通过简单的配置实现自动管理登录态等功能",
"keywords": [ "keywords": [
"登录态", "登录态",

View File

@@ -62,6 +62,8 @@ export interface IInitOption {
backupDomainEnableCallback?: Function; backupDomainEnableCallback?: Function;
/* 是否需要启用备用域名 */ /* 是否需要启用备用域名 */
domainChangeTrigger?: Function; domainChangeTrigger?: Function;
/* 是否修复请求的success/complete的时序问题详见README的QA部分 */
isFixSuccessCompleteTiming: boolean;
} }
export interface ICodeToSessionOptions{ export interface ICodeToSessionOptions{

View File

@@ -168,11 +168,22 @@ function doRequest(obj: IRequestOption) {
return reject({ type: 'system-error', res }); return reject({ type: 'system-error', res });
}, },
complete() { complete() {
if (typeof obj.complete === "function") { if (config.isFixSuccessCompleteTiming) {
obj.complete(); setTimeout(()=>{
} if (typeof obj.complete === "function") {
if (obj.showLoading) { obj.complete();
loading.hide(); }
if (obj.showLoading) {
loading.hide();
}
}, 0)
} else {
if (typeof obj.complete === "function") {
obj.complete();
}
if (obj.showLoading) {
loading.hide();
}
} }
} }
}) })
@@ -201,11 +212,22 @@ function doUploadFile(obj: IUploadFileOption) {
return reject({ type: 'system-error', res }); return reject({ type: 'system-error', res });
}, },
complete() { complete() {
if (typeof obj.complete === "function") { if (config.isFixSuccessCompleteTiming) {
obj.complete(); setTimeout(()=>{
} if (typeof obj.complete === "function") {
if (obj.showLoading) { obj.complete();
loading.hide(); }
if (obj.showLoading) {
loading.hide();
}
}, 0)
} else {
if (typeof obj.complete === "function") {
obj.complete();
}
if (obj.showLoading) {
loading.hide();
}
} }
} }
}) })

View File

@@ -202,8 +202,6 @@ async function code2Session(code: string) {
return reject({type: "http-error", res}); return reject({type: "http-error", res});
} }
}, },
complete() {
},
fail: (res) => { fail: (res) => {
// 如果主域名不可用,且配置了备份域名,且本次请求未使用备份域名 // 如果主域名不可用,且配置了备份域名,且本次请求未使用备份域名
if ((config.domainChangeTrigger && config.domainChangeTrigger(res)) && url.isInBackupDomainList(obj.url)) { if ((config.domainChangeTrigger && config.domainChangeTrigger(res)) && url.isInBackupDomainList(obj.url)) {

View File

@@ -40,7 +40,9 @@ const defaultConfig: IInitOption = {
return true; return true;
} }
return false; return false;
} },
// 是否修复请求的success/complete的时序问题详见README的QA部分
isFixSuccessCompleteTiming: false
}; };
export default defaultConfig; export default defaultConfig;