微信小程序使用promise封装单独请求和并发请求

// true:开发/测试环境,false:生产环境
var flag = false;
var _baseUrl = '';
if (flag) {
	_baseUrl = 'http://xxx/api';
} else {
	_baseUrl = 'https://xxx/api';
}
var baseUrl = _baseUrl;
var commonParams = {
	url: '',
	data: {},
	method: 'POST',
	header: {
		'Content-Type': 'application/x-www-form-urlencoded',
	},
	dataType: 'json'
};
export const request = (opt) => {
	let options = Object.assign({}, commonParams, opt)
	let { url, data, method, header, dataType } = options
	header["Hyv-SessionId"] = wx.getStorageSync("sessionId") || ""
	let _url = baseUrl + url
	wx.showLoading({
		title: '数据加载...',
	})
	return new Promise((resolve, reject) => {
		wx.request({
			url: _url,
			data: data,
			method: method,
			header: header,
			dataType: dataType,
			success: function (res) {
				if (res && res.statusCode == 200 && res.data) {
					if (res.data.code == 300000) {
						wx.showToast({
							title: '您尚未登录或登录信息已过期',
							icon: "loading",
							success: () => {
								wx.navigateTo({ url: '/pages/login' })
							}
						})

					} else {
						resolve(res.data)
					}

				} else {
					reject(res)
				}
			},
			fail: function (err) {
				wx.showToast({
					title: '请求超时',
					icon: 'none',
					mask: true,
					duration: 2000
				})

			},
			complete: function () {
				wx.hideLoading()
			}
		})
	})
}
//并发
export const requestAll = (requests) => {
	let promiseList = [];
	for (let i = 0; i < requests.length; i++) {
		let opt = requests[i];
		promiseList.push(request(opt,true))
	}
	var ret = Promise.all(promiseList);
	ret.then(e => {
		let needLogin = false;
		needLogin = e.some(v => {
			return v.code == 300000
		})
		if (needLogin) {
			wx.showToast({
				title: '您尚未登录或登录信息已过期',
				icon: "loading",
				success: function success() {
					wx.navigateTo({
						url: '/pages/login'
					});
				}
			});
		}
	});
	return ret;
}

单独一条请求调用

        var ret = await request({
            url: '/hotKeywords',
            method: "GET"
        });
        try {
            if (ret.code == 200000) {
                //...
            }
        } catch (e) {
            console.log(e);
        }

并发请求调用

        var req1 = {
          url: '/getAudioPlayList',
          method: "GET",
          data:{
            size:2
          }
        };
        var req2 = {
          url:"/getCollectList/album",
          method: "GET",
          data:{
            size:6
          }
        };
        var req3 = {
          url:"/getCollectList/audio",
          method: "GET",
          data:{
            size:2
          }
        };
        var ret = await requestAll([req1,req2,req3],0)
        try {
          //...
        } catch (e) {
          console.log(e);
        }

猜你喜欢

转载自blog.csdn.net/weixin_36185028/article/details/102394378