zoukankan      html  css  js  c++  java
  • 微信小程序网络超时的处理

    连接网络总有可能客户端因为网络情况,无法连接到微信服务器或者开发者服务器。但是有的只有在小程序启动时才能运行,比如

    onLaunch,通过这个我们可以获取用户的基本信息,或者定位用来做下一步处理,如果这个无法获取数据,会导致整个小程序的失败。
    所以我建议可以把错误分两个级别,假如是开发者服务器连接不上,可以通过重载页面来处理,但是如果是onLaunch中的数据也无法获取就必须让用户退出小程序,重新打开再试了。
    app.json 中配置用来设置超时时间,默认为6000毫秒,也就是6秒
    "networkTimeout": {
        "request": 6000,
        "downloadFile": 10000
      },
    

    一、在onLaunch运行任务如果超时,我把错误级别定为0,并转向错误页面

    wx.login({
          success(res) {
            if (res.code) {
              //console.log(res.code);
              //发起网络请求
              wx.request({
                url: 'https://**/index/zz/getuserinfo',
                data: {
                  code: res.code
                },
                success: res => {
                
                  wx.setStorageSync('open_id', res.data.openid);
                  wx.setStorageSync('session_id', res.data.session_id);
                  wx.setStorageSync('session_key', res.data.session_key);
                  that.globalData.isSessionkey=true;
                  //console.log(res.data);
                  if (that.sessionCallback) {
                            that.sessionCallback(res);
                  }
                 
                },fail:f=>
                {
                  wx.showModal({
                    title: '提示',
                    showCancel: false,
                    content: '可能网络不太好,请重试!',
                    success: function () {
                      wx.navigateTo({
                        url: '/pages/reload?error=0'
                      });
                    }
                  });
                }
              })
            } else {
              console.log('登录失败!' + res.errMsg)
            }
          
          }, fail: function () {
            wx.showModal({
              title: '提示',
              showCancel: false,
              content: '可能网络不太好,请重试!',
              success: function () {
                wx.navigateTo({
                  url: '/pages/reload?error=0'
                });
              }
            });
          }
        });

    二、如果是页面请求超时,我把错误定为2,可以通过重试来修复

        

    wx.request({
        url: webUrl + model.url,
        data: model.param,
        method: model.method,
        success: function (res) {
    
        },
        fail: function (res) {
          wx.hideLoading();
          wx.showModal({
            title: '提示',
            showCancel: false,
            content: '可能网络不太好,请重试!',
            success: function () {
              wx.navigateTo({
                url: '/pages/reload?error=1'
              });
            }
          });
        }
      })
    

    三、处理页面:要使用getCurrentPages()获取上一页对象,必须使用wx.navigateTo转向此页

    /**
       * 页面的初始数据
       */
      data: {
       error:0 // 0:需要退出小程序 1:可以重新发起网络请求重试
      },
      reLoad:function(error)
      {
        var pages = getCurrentPages();//获取页面栈
        if (pages.length > 1) {
          //上一个页面实例对象
          var prePage = pages[pages.length - 2];
          let url=prePage.route;
          var options = prePage.options //如果要获取url中所带的参数可以查看options
          console.log('options', options);
          //拼接url的参数
          var urlWithArgs = url + '?'
          for (var key in options) {
            var value = options[key]
            urlWithArgs += key + '=' + value + '&'
          }
          urlWithArgs = urlWithArgs.substring(0, urlWithArgs.length - 1)
         
          wx.reLaunch({
            url: '/' + urlWithArgs,
            fail:function(e)
            {
              wx.switchTab({
                url: '/' + prePage.route,
              })
            }
          });
        }
      },
    
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
        this.setData({ error: options.error});
       // this.reLoad(options.error);
      },
    

      

          

     

    页面wxml

    <view class="container">
    <button bindtap="reLoad" class="error" wx:if="{{error==1}}" >重新加载 </button>
    <navigator hover-class="none"  wx:if="{{error==0}}" class="error" target="miniProgram" open-type="exit"> 退出重试</navigator>
    </view>
  • 相关阅读:
    c++ 有序二叉树的应用
    c++ 二叉树的遍历
    c++ 创建二叉树
    c++ 双向链表 的查找和删除
    c++ 双向循环链表
    c++ 双向链表
    Jzoj4209 已经没有什么好害怕的了
    Jzoj4209 已经没有什么好害怕的了
    后缀自动机转后缀树模板
    后缀自动机转后缀树模板
  • 原文地址:https://www.cnblogs.com/fogwang/p/12656734.html
Copyright © 2011-2022 走看看