真机运行至安卓,使用uni.request发起请求

- 发布:2022-04-21 22:49
- 更新:2022-04-22 06:42
- 阅读:419
产品分类: HbuilderX
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 19044.1645
HBuilderX版本号: 3.4.6
操作步骤:
预期结果:
success,fail,complete函数拿到返回值
success,fail,complete函数拿到返回值
实际结果:
三个回调函数均无数据返回
三个回调函数均无数据返回
bug描述:
更新IDE至3.4.6之后 ,在安卓上uni.request以及其他axios插件全部失效,表现为请求无反应以及timeout
IDE回退至3.3.9之后恢复正常



呆狗的一生 - 呆狗的一生
看了一下,你写的这个有错。如果Promise如果没有成功(resolve),是不会有返回数据 的,你在发生错误或拒绝时,没有调用reject方法,而是 return了一个 Promise.reject()。多看,多改

呆狗的一生 - 呆狗的一生
另外你写的这个方法太冗余,不用去new 一个Promise并返回。因为uni.request本来就能返回一个Promise。请看官方文档:API的Promise化。
贴出我的代码。
import config from './config';
import token from './token';
const send = (url, data = {}, setting) => {
let {
method,
base_url,
header,
loadingText,
showLoading,
} = setting;
showLoading && uni.showLoading({ title: loadingText || `加载中` });
header = Object.assign((() => {
const tokeValue = token.get();
let default_header = {};
tokeValue && (default_header[config.tokenKey] = tokeValue);
return default_header;
})(), header);
return uni.request({
data,
header,
method,
timeout: config.timeout,
url: (base_url || config.apiUrl) + url,
}).then(res => {
showLoading && uni.hideLoading();
// errno是后端定义的统一返回格式
if (res.statusCode != 200 || res.data.errno != 0) {
let msg = res.data.message || res.statusCode.toString();
throw new Error(msg);
};
return res.data.data;
}).catch(err => {
showLoading && uni.hideLoading();
uni.showModal({ title: `提示`, content: err.message });
return err;
});
};
export function post(url, data, setting) {
return send(url, data, Object.assign({
method: `POST`
}, setting));
};
export function get(url, data, setting) {
return send(url, data, Object.assign({
method: `GET`
}, setting));
};
export function upload(options) {
options.header = Object.assign({
[config.tokenKey]: token.get()
}, options.header);
options.url = config.apiUrl + options.url;
return uni.uploadFile(options).then(res => {
// 注意data为string
return JSON.parse(res.data).data;
}).catch(err => {
console.log(err.message);
return err;
});
};
export default {
install(Vue) {
Vue.prototype.post = post;
Vue.prototype.get = get;
Vue.prototype.upload = upload;
},
};
仅供参考