1. 程式人生 > >小程序坑 redirectTo 計時器 setInterval clearInterval

小程序坑 redirectTo 計時器 setInterval clearInterval

int redirect ces 解決 tint on() 一個 ole start

var time = 20;    
var timer = setInterval(function () { time = time - 1; that.setData({ CountDown: time }); console.log(time); if (time == 10) { clearInterval(timer ); wx.redirectTo({ url: ‘./game‘, }); } }, 1000);

正常情況下頁面刷新之後正在執行的計時器會被清除,可是在小程序當中並不是這樣,即使執行了redirectTo關閉了當前頁面到一個新頁面,直到達到清除的條件之前(此例是time == 10),老頁面的計時器仍舊不會被清除,仍舊繼續執行。

網友通過將timer添加到data中,通過以下方法獲得setInterval返回值,並在onload的時候清楚上一個頁面的計時器,這種做法是錯誤的,因為此時的this已是一個新的頁面,再通過this.data.timer的方法是獲取不到上一個頁面的計時器id的。每次開始打印的都是

start:10000是達不到啟動頁面就能清除上一個頁面的計時器的效果的。
  data: {
    timer: 10000
  }, 

onLoad: function(options) {
    var that = this;
    clearInterval(that.data.timer);
    console.log(
"start:" + that.data.timer ); var time = 20; that.data.timer = setInterval(function () { time = time - 1; that.setData({ CountDown: time }); console.log(time); if (time == 10) { clearInterval(that.data.timer ); wx.redirectTo({ url:
‘./game‘, }); } }, 1000); console.log("end:" + that.data.timer);*/ }

解決方法:redirectTo提供了接口調用成功或完成之後的success、complete的回調方法,只要在這裏寫clearInterval就能在跳轉之前清除設置的interval了,在這裏為便於其他的函數也能獲取到當前頁面的計時器進行清除,我們仍舊將timer設置到data中

  data: {
    timer: 10000
  }, 

onLoad: function(options) {
    var that = this;
    clearInterval(that.data.timer);
    console.log("start:" + that.data.timer );
    var time = 20;
    that.data.timer = setInterval(function () {
      time = time - 1;
      that.setData({
        CountDown: time
      });
      console.log(time);
      if (time == 10) {
        clearInterval(that.data.timer );
        wx.redirectTo({
          url: ‘./game‘,
       success: function() {         clearInterval(that.data.timer);        }
        });

      }
    }, 1000);
    console.log("end:" + that.data.timer);*/

  }

小程序坑 redirectTo 計時器 setInterval clearInterval