微信小程序的request请求方法简单封装,并使用abort方法处理重复请求

 Talk is cheap, Show me the code. 

在request请求的时候,通常会遇到前一个请求没有结束,就发起了一个新的请求,这个时候就要把先前同样的请求取消掉,也就是使用abort() 方法取消请求。下面的代码是对微信小程序的request请求简单的封装。

/**
 * GET请求
 * @param url 请求地址
 * @param param 参数
 * @return {Promise} 返回值Promise对象
 */
var get = function (url, param) {

    // 请求之前,先前之前的请求取消掉
    if (param.requestTaskKey && getApp().requestTasks[param.requestTaskKey]) {
        try {

            //getApp() 获取全局app对象内容
            getApp().requestTasks[param.requestTaskKey].abort()
        } catch (e) {
            console.error(e)
        }
    }


    // 使用Promise封装request方法,实现异步操作队列化
    var promise = new Promise(function (resolve, reject) {
        let requestTask = wx.request({
            url: url,
            data: param,
            success: function (res) {
                resolve(res.data);
            },
            fail: function (res) {

                // 异常响
                reject()

                if (res.errMsg && res.errMsg == 'request:fail abort') {
                    // 对于取消的请求,操作处理
                }
            },
            complete: function (e) {

            }
        })


        if (param.requestTaskKey) {

            // 将当前请求存入全局对象里
            getApp().requestTasks[param.requestTaskKey] = requestTask
        }

    })
    return promise;
};


get('http://xxx.com', {
    a: 10,
    requestTaskKey: 'request_key'
}).then(function (res) {
    console.log(res)
}).catch(function (err) {
    console.error(err)
})
原创文章 22 获赞 20 访问量 18万+

猜你喜欢

转载自blog.csdn.net/lw001x/article/details/101105139