白衣
白衣
  • 发布:2022-04-21 22:49
  • 更新:2022-04-22 06:42
  • 阅读:312

【报Bug】IDE3.4.6版本下,uni.request以及axios各种插件均失效

分类:HBuilderX

产品分类: HbuilderX

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 19044.1645

HBuilderX版本号: 3.4.6

操作步骤:

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

预期结果:

success,fail,complete函数拿到返回值

实际结果:

三个回调函数均无数据返回

bug描述:

更新IDE至3.4.6之后 ,在安卓上uni.request以及其他axios插件全部失效,表现为请求无反应以及timeout
IDE回退至3.3.9之后恢复正常

2022-04-21 22:49 负责人:无 分享
已邀请:
呆狗的一生

呆狗的一生 - 呆狗的一生

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

呆狗的一生

呆狗的一生 - 呆狗的一生

你品,你细品,你在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;  
    },  
};  

仅供参考

该问题目前已经被锁定, 无法添加新回复