uni-app IDE3.4.6版本下 uni.request以及axios各种插件均失效
uni-app IDE3.4.6版本下 uni.request以及axios各种插件均失效
操作步骤:
- 真机运行至安卓,使用uni.request发起请求
预期结果:
- success,fail,complete函数拿到返回值
实际结果:
- 三个回调函数均无数据返回
bug描述:
- 更新IDE至3.4.6之后,在安卓上uni.request以及其他axios插件全部失效,表现为请求无反应以及timeout
- IDE回退至3.3.9之后恢复正常
信息类别 | 详细信息 |
---|---|
开发环境 | Windows |
版本号 | 19044.1645 |
项目创建方式 | HbuilderX 3.4.6 |
更多关于uni-app IDE3.4.6版本下 uni.request以及axios各种插件均失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
看了一下,你写的这个有错。如果Promise如果没有成功(resolve),是不会有返回数据 的,你在发生错误或拒绝时,没有调用reject方法,而是 return了一个 Promise.reject()。多看,多改
更多关于uni-app IDE3.4.6版本下 uni.request以及axios各种插件均失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你品,你细品,你在success回调里return一个值,有没有作用,谁能收到你return的值。
另外你写的这个方法太冗余,不用去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;
},
};
仅供参考
在 uni-app
的 IDE 3.4.6
版本下,如果 uni.request
以及 axios
等网络请求插件均失效,可能是由于以下几个原因导致的。你可以按照以下步骤进行排查和解决:
1. 检查网络请求权限
确保在 manifest.json
中已经正确配置了网络请求权限。
在 manifest.json
的 app-plus
或 mp-weixin
等平台配置中,添加以下内容:
"networkTimeout": {
"request": 60000,
"connectSocket": 60000,
"uploadFile": 60000,
"downloadFile": 60000
}
2. 检查请求地址
确保请求的地址是合法的,并且支持跨域(如果是 H5 环境)。
如果是本地开发,可以使用 http://localhost
或 http://127.0.0.1
,但需要确保后端服务支持跨域。
3. 检查请求代码
确保 uni.request
或 axios
的代码编写正确。以下是一个 uni.request
的示例:
uni.request({
url: 'https://example.com/api/data',
method: 'GET',
success: (res) => {
console.log('请求成功', res.data);
},
fail: (err) => {
console.log('请求失败', err);
}
});
如果是 axios
,确保已经正确安装并引入:
npm install axios
然后在代码中使用:
import axios from 'axios';
axios.get('https://example.com/api/data')
.then(response => {
console.log('请求成功', response.data);
})
.catch(error => {
console.log('请求失败', error);
});
4. 检查 IDE 或编译环境问题
- 尝试重启
HBuilderX
或重新编译项目。 - 如果问题仍然存在,可以尝试升级
HBuilderX
到最新版本,或者回退到一个已知稳定的版本。 - 检查是否有插件冲突,尝试禁用部分插件后重新编译。
5. 检查运行环境
- 如果是 H5 环境,确保后端服务支持跨域。
- 如果是小程序环境,确保在小程序管理后台已经配置了合法的请求域名。
- 如果是 App 环境,确保已经正确配置了网络权限。
6. 调试和日志
- 在
uni.request
或axios
的fail
或catch
中打印错误信息,查看具体错误原因。 - 使用浏览器的开发者工具(H5 环境)或微信开发者工具(小程序环境)查看网络请求的详细日志。
7. 尝试其他请求库
如果 uni.request
和 axios
均失效,可以尝试使用其他网络请求库,例如 fetch
:
fetch('https://example.com/api/data')
.then(response => response.json())
.then(data => {
console.log('请求成功', data);
})
.catch(error => {
console.log('请求失败', error);
});