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);
  });
        
      
                    
                  
                    
