press-next
Version:
Vue3 组件库,支持 Composition API
65 lines (58 loc) • 1.71 kB
text/typescript
import { BaseRequest } from '../base/base-request';
import type { IBaseRequestOptions } from '../types';
/**
* 预处理,与H5端统一数据格式
* @param param 网络返回的数据
*/
function transferData(param: any) {
if (param) {
let data = param?.data || '{}';
// dataType为'text',一般情况下返回的 res.data 是JSON字符串,需要解析 res.data 为 JSON 对象
// 但不排除特殊情况,所以需要 try/catch 处理
try {
data = JSON.parse(data);
param.data = data;
} catch (e) {
}
}
return param;
}
/**
* 小程序Post请求发送类
*/
export class MpRequest extends BaseRequest {
constructor(options: IBaseRequestOptions) {
super(options);
}
doSend(param: any): Promise<any> {
// 解决京东小程序真机调试返回非Promise的情况
return new Promise((resolve) => {
const params = {
url: param.url,
dataType: param.dataType || 'text',
header: param.header,
method: param.method ? param.method : 'POST',
data: param.reqData,
success(res: any) {
if (res.statusCode >= 200 && res.statusCode < 300) {
const data = transferData(res);
resolve(data);
} else {
// 异常错误
res.data = {
r: res.statusCode,
};
const data = transferData(res);
resolve(data);
}
},
fail(err: any) {
// 一般小程序遇到接口失败(如502)时,没办法走到这里,会走到success
const data = transferData(err);
resolve(data);
},
};
uni.request(params);
});
}
}