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

https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20220421/ab7d7a1d136ebac77ffb6a3d4535e5ae.jpg

https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20220421/d622ed9a533da1824a3ed6140227c2c9.jpg


更多关于uni-app IDE3.4.6版本下 uni.request以及axios各种插件均失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

看了一下,你写的这个有错。如果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-appIDE 3.4.6 版本下,如果 uni.request 以及 axios 等网络请求插件均失效,可能是由于以下几个原因导致的。你可以按照以下步骤进行排查和解决:


1. 检查网络请求权限

确保在 manifest.json 中已经正确配置了网络请求权限。
manifest.jsonapp-plusmp-weixin 等平台配置中,添加以下内容:

"networkTimeout": {
  "request": 60000,
  "connectSocket": 60000,
  "uploadFile": 60000,
  "downloadFile": 60000
}

2. 检查请求地址

确保请求的地址是合法的,并且支持跨域(如果是 H5 环境)。
如果是本地开发,可以使用 http://localhosthttp://127.0.0.1,但需要确保后端服务支持跨域。


3. 检查请求代码

确保 uni.requestaxios 的代码编写正确。以下是一个 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.requestaxiosfailcatch 中打印错误信息,查看具体错误原因。
  • 使用浏览器的开发者工具(H5 环境)或微信开发者工具(小程序环境)查看网络请求的详细日志。

7. 尝试其他请求库

如果 uni.requestaxios 均失效,可以尝试使用其他网络请求库,例如 fetch

fetch('https://example.com/api/data')
  .then(response => response.json())
  .then(data => {
    console.log('请求成功', data);
  })
  .catch(error => {
    console.log('请求失败', error);
  });
回到顶部