首页 > 技术文章 > uni-app 封装 http promise请求,仅提供 post,all,spread 方法

gitByLegend 2019-11-21 18:35 原文

  简单封装一下 uni-app 的请求,因为项目中只用 post 请求,所以只封装了 post 和 all 方法。

  更新,新增 spread 方法  2019-11-22 10:37:21

global.http = {
        timer: null,
        beenLoginPage: false,
        post: (url, data, loading) => {
            if (loading) {
                uni.showLoading({
                    mask: true
                })
            }
            return new Promise((resolve, reject) => {
                uni.request({
                    url: BaseUrl + url,
                    method: "POST",
                    header: {
                        sessid: getSessid()
                    },
                    data,
                    success: res => {
                        if (loading) {
                            uni.hideLoading();
                        }
                        if (res.data.code === 300) {
                            $Toast('登录过期,请重新登录!');
                            removeItem('sessid');
                            if (http.beenLoginPage) return;
                            if (http.timer != null) {
                                clearTimeout(http.timer);
                            };
                            http.timer = setTimeout(function() {
                                http.timer = null;
                                uni.reLaunch({
                                    url: '/pages/login/login'
                                })
                                http.beenLoginPage = true;
                                setTimeout(() => {
                                    http.beenLoginPage = false;
                                }, 600000)
                            }, 1500);
                            return;
                        }
                        if (res.statusCode != 200 || res.data.code != 200) {
                            uni.showToast({
                                title: res.data.msg || '网络异常',
                                duration: 1500,
                                icon: "none"
                            })
                            return;
                        }
                        resolve(res);
                    },
                    fail(err) {
                        if (loading) {
                            uni.hideLoading();
                        }
                        $Toast('网络异常!');
                        reject(err);
                    }
                })
            })

        },
        all: (promise) => {
            return Promise.all(promise);
        },
        spread: function(callback) {
            return function wrap(arr) {
                callback.apply(null, arr);
            };
        }
    }

 2019-11-22  13:09:27

  尝试理解 spread 函数

var args = [1, 2, 3];

function spread(cb){
    return function wrap(arr){
        cb.apply(null,arr);
    }
}

(spread((x,y,z)=>{
    console.log('x->'+x);
    console.log('y->'+y);
    console.log('z->'+z);
}))(args);

 

 

 

 

 

推荐阅读