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)
})