具体问题可见插件
https://ext.dcloud.net.cn/plugin?id=23422
UTS代码
export async function xRequest<T>(instanceConfig: RequestOptions<any>): Promise<T>{
// #ifdef APP-ANDROID
// 解决Android泛型转换失败问题
// 如果把此处代码移入onSuccess回调中 Android编译会报错 不太清楚什么问题 等研究明白后更新
// 这样也可以正常使用
const v = await _xRequest<T>(instanceConfig) as UTSJSONObject;
return JSON.parse<T>(JSON.stringify(v)) as T;
// #endif
// #ifndef APP-ANDROID
return _xRequest<T>(instanceConfig);
// #endif
}
async function _xRequest<T>(instanceConfig: RequestOptions<any>): Promise<T>{
return createXRequest<APIResponse>(
{...} as XBaseRequestOptions
, {
onRequest: function(config: RequestOptions<any>) {
...
},
onRequestEnd: async function(response: RequestSuccess<APIResponse>) {
if(401 == response.statusCode){
// 无权限/鉴权无效/鉴权过期 无感刷新Token
await refreshToken();
console.log('已刷新鉴权!');
// 返回null 请求重试
return null;
}
return 200 == response.statusCode;
},
onRequestError: function(error: IUniError, response: RequestSuccess<APIResponse> | null) {
....
},
onRequestMonitor: function(response: APIResponse) {
.....
},
onRequestMonitorError: function(response: APIResponse) {
.....
},
onSuccess: function(response: APIResponse) {
return response.data as any | undefined;
//return JSON.parse<T>(JSON.stringify(v)) as T;
}
} as XRequestOptions<APIResponse>
, instanceConfig
) as Promise<T>
}
如果将JSON.parse<T>(JSON.stringify(v)) as T 这句代码放在外层转换,在Android上运行正常
如果将这句代码移入onSuccess里,Android编译失败,报错见图
大佬们给看看,困扰好几天了