小程序坑 redirectTo 計時器 setInterval clearInterval
阿新 • • 發佈:2018-08-05
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