收藏
回答

小程序内存告警,存在闪退风险,可能是因为setTimeout

可是我已经清除了定时器啊,为什么还是会检测出来


回答关注问题邀请回答
收藏

4 个回答

  • 好名字都被取了
    好名字都被取了
    2023-07-03

    麻烦问下 问题的第一个图 哪来的 我也想定位下内存告警原因

    2023-07-03
    有用
    回复
  • 灵芝
    灵芝
    2019-07-03

    麻烦提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html

    2019-07-03
    有用
    回复 5
    • 努力努力再努力
      努力努力再努力
      2019-07-05

      saoheijubao: function () {

      if(wx.getStorageSync('login')){

      var that = this;

      wx.request({

      url: app.globalData.apiurl + 'appShouji/isAccreditation',

      data: {

      user_msg_id_: wx.getStorageSync('user_msg_id_')

      },

      header: {},

      method: 'GET',

      dataType: 'json',

      responseType: 'text',

      success: function (res) {

      console.log(res)

      wx.hideLoading()

      if (res.data.data.code == 200) {

      wx.navigateTo({

      url: '../../pages/saoheijubao/index',

      })

      }

      else if (res.data.data.code == 201) {

      var tit = '用户未实名认证';

      app.showToast(tit)

      var timerTem = setTimeout(function (res) {

      console.log(res)

      wx.navigateTo({

      url: '../../pages/shimingrenzheng/index?code=' + res.data.data.code,

      })

      }, 1000)

      } else if (res.data.data.code == 202) {

      var tit = '实名认证审核中,请耐心等待';

      app.showToast(tit)

      } else if (res.data.data.code == 203) {

      var tit = '实名认证未通过,请重新上传资料';

      app.showToast(tit)

      var timerTem2 =setTimeout(function (res) {

      console.log(res)

      wx.navigateTo({

      url: '../../pages/shimingrenzheng/index?code=' + res.data.data.code,

      success: function (res) {

      that.setData({

      timerTem2: timerTem2

      })

      },

      })

      }, 1000)

      }

      },

      })

      }else{

      wx.navigateTo({

      url: '../../pages/login/index',

      })

      }


      },



      /**

        * 生命周期函数--监听页面隐藏

        */

      onHide: function() {

      clearTimeout(this.data.timerTem)

      clearTimeout(this.data.timerTem2)

      },


      /**

        * 生命周期函数--监听页面卸载

        */

      onUnload: function() {

      clearTimeout(this.data.timerTem)

      clearTimeout(this.data.timerTem2)

      },


      2019-07-05
      回复
    • 努力努力再努力
      努力努力再努力
      2019-07-05

      小程序闪退是什么原因呢,安卓苹果都不行


      2019-07-05
      回复
    • 灵芝
      灵芝
      2019-07-05回复努力努力再努力

      可以检查一下代码逻辑,看看是否有死循环

      2019-07-05
      回复
    • 努力努力再努力
      努力努力再努力
      2019-07-05回复灵芝

      那会不会和settimeout太多有关系呢?需要cleartimeout吗?求解释

      2019-07-05
      回复
    • 灵芝
      灵芝
      2019-07-05回复努力努力再努力

      可以按这个提示处理一下


      2019-07-05
      回复
  • ᅟᅠ
    ᅟᅠ
    2019-07-03

    想你应该打印下拿到定时器ID没有?       因为我也这样使用过       不存在说清除不掉

    2019-07-03
    有用
    回复 2
    • 努力努力再努力
      努力努力再努力
      2019-07-03

      拿到了,也能打印出来,你那个是怎么写的,不是把它setdata然后监听页面消失后清除吗

      2019-07-03
      回复
    • ᅟᅠ
      ᅟᅠ
      2019-07-03回复努力努力再努力

      你在定时器里放个打印标记,清掉定时器之后,检验下定时器还有没有执行不就知道了,如果清掉之后定时器里代码面的代码没有执行,说明开发工具有问题,升级下看看,如果清掉之后,里面的代码还在执行,你就得检查检查你的代码了

      2019-07-03
      回复
  • \
    \
    2019-07-03

    在新跳转的页面onload里面清除定时器不就行了

    2019-07-03
    有用
    回复 2
    • 努力努力再努力
      努力努力再努力
      2019-07-03

      那和监听页面隐藏和卸载以后清除定时器不是一样吗?在新页面清除定时器得知道取消的定时器的 ID, 现在是明明已经清楚了,还是会提示清除定时器

      2019-07-03
      1
      回复
    • \
      \
      2019-07-03

      取消定时器的ID不就是你定义的时候定义的吗,传参传过去不就行了,而且你清理定时器写的那段确定执行了吗,cleartimeout()里的参数是定时器ID,你传的参数不是个变量吗。

      2019-07-03
      回复
登录 后发表内容