搜索页面 网络请求没有完成时点击关闭会出现问题。。。
来源:16-1 将锁提取到分页行为中

Altair丶
2019-09-16
老师!!! 我在搜索页面比如说搜索 哈利波特 按回车会发送网络请求 网络请求到一半的时候点击关闭按钮(就是内个小x)会出现问题 (问题1.loading不会直接消失,loading会在 哈利波特 的网络请求成功后消失; 问题 2.当在次点击 韩寒 的标签 页面会出现请求下来的 哈利波特 的内容)
我试了一下 官方文档给出的 RequestTask.abort()中断请求任务 没弄明白 文档说明也不是很清楚
写回答
1回答
-
官方文档给出的 RequestTask.abort()这个方法只对wx.request产生的实例有用
如果你封装的是promise,那么你就要把wx.request实例的abort方法绑定到promise实例上
class HTTP{ request( { url, method, data } ){ var requestTask; const resultPromise = new Promise((resolve, reject) => { requestTask = wx.request({ url: config.restpath + url, method, data, header: { 'content-type': 'application/json', appkey: config.appkey }, success: (res) => { // 判断以2(2xx)开头的状态码为正确 // 异常不要返回到回调中,就在request中处理,记录日志并showToast一个统一的错误即可 const code = res.statusCode.toString(); const data = res.data; if (code.startsWith('2')){ resolve(data, res); }else{ this._showError(data.error_code); reject(data, res); } }, fail: (err) => { this._showError(); reject(err); } }); }); // 将中断请求方法绑定到promise上。因为直接定义为abort函数执行不能中断,所以封装到一个函数里面执行 resultPromise.__proto__.abort = () => requestTask.abort(); return resultPromise; } }
这样你在点击关闭、X按钮、重新搜索的时候,都中断一下这个请求,然后做一下错误机制的判断(中断会报canceled的错),以及清除等待动画,就行了
112019-09-17
相似问题