javascript - 请问大家一个在小程序开发时,容易遇到的一个问题怎么解决更合适?

 

问题描述:

image.png

我这个页面有个onload 有些参数需要从options里面接收 然后做下图的接口数据请求

image.png

这个接口是需要登录之后才能正常调用的,所以会有个失败就执行_util2.default.login()的登录方法,

但是我重新调用登录后,登录是成功了,但是页面数据却没有更新

我想的是重新刷新下页面,但是如果重新刷新页面会导致onload的options参数无法接收到,

或者 是再次调用下Redenvelope_click_info 这个接口, 但是这样也会导致我无法获取onload里传过来的mid 和urid 参数,

image.png

请问这种情况 一般如何处理比较合适,有什么比较好的方法思路吗?

  onLoad: function onLoad(options) {
      console.log(options,'options0')
      var mid = options.mid
      var urid = options.urid
      var share = options.share
      this.setData({
        mid:mid,
        urid:urid,
        share:share
      })

      _tip2.default.loading();
      var that = this;
      wx.getStorage({
          key: 'session_key',
          success: function success(res) {
              _wxRequest2.default.post({
                  'url': _api2.default.Redenvelope_click_info,
                  'data': {
                      rd3_key: res.data,
                      mid: mid,
                      urid:urid
                  }
              }).then(function (res) {
                  if (res.code == 100) {
                     console.log(res.data.status,'resss333')
                     if(res.data.status == 1){
                      that.setData({
                        show_tc:true
                      })
                     }
                      that.setData({
                        data_content:res.data,
                        red_id:res.data.red_id
                      })
                    

                  } else{
                      _tip2.default.toast(res.msg);
                  }
                  _tip2.default.loaded();
              });
          },
          fail: function fail() {
              _util2.default.login();
              
          }
      });
    },

 

第 1 个答案:

不建议你和后端这样设计系统,你们这样搞,在接口出问题的时候,极易造成死循环。

如果一定要这样弄,可以这样:

onLoad: function onLoad(options) {
      const sotreOptions = wx.getStorageSync('__OPTIONS')
if(!sotreOptions) wx.setStorageSync('__OPTIONS', options)
else options = sotreOptions
      var mid = options.mid
      var urid = options.urid
      var share = options.share
      this.setData({
        mid:mid,
        urid:urid,
        share:share
      })

      _tip2.default.loading();
      var that = this;
      wx.getStorage({
          key: 'session_key',
          success: function success(res) {
              _wxRequest2.default.post({
                  'url': _api2.default.Redenvelope_click_info,
                  'data': {
                      rd3_key: res.data,
                      mid: mid,
                      urid:urid
                  }
              }).then(function (res) {
                  if (res.code == 100) {
                    wx.removeStorage({ key: '__OPTIONS'})
                     console.log(res.data.status,'resss333')
                     if(res.data.status == 1){
                      that.setData({
                        show_tc:true
                      })
                     }
                      that.setData({
                        data_content:res.data,
                        red_id:res.data.red_id
                      })
                    

                  } else{
                      _tip2.default.toast(res.msg);
                  }
                  _tip2.default.loaded();
              });
          },
          fail: function fail() {
              _util2.default.login();
              
          }
      });
    },

有2个问题不太理解:(1)模板表达式为何要放在沙盒中,且不能访问用户定义的全局变量?我知道沙盒的目的是提供安全性,但是在模板中使 ...