搜索页面 网络请求没有完成时点击关闭会出现问题。。。

来源:16-1 将锁提取到分页行为中

Altair丶

2019-09-16

老师!!! 我在搜索页面比如说搜索 哈利波特 按回车会发送网络请求 网络请求到一半的时候点击关闭按钮(就是内个小x)会出现问题 (问题1.loading不会直接消失,loading会在 哈利波特 的网络请求成功后消失; 问题 2.当在次点击 韩寒 的标签 页面会出现请求下来的 哈利波特 的内容)

我试了一下 官方文档给出的 RequestTask.abort()中断请求任务 没弄明白 文档说明也不是很清楚

写回答

1回答

悟酱起飞

2019-09-17

官方文档给出的 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的错),以及清除等待动画,就行了

1
1
Altair丶
非常感谢!
2019-09-17
共1条回复

纯正商业级微信小程序应用实战,全方位小程序特性讲解

真实数据的高质量小程序项目,学会直接工作

4782 学习 · 2125 问题

查看课程