关于Taro定时器计时的解决方案

最近做的一个项目里,遇到个问题搞得我吃不香睡不足,
taro中搞得定时做小程序中的计时工资,器死活无法清除, 开屏 黑屏的生命周期都写好什么的,但总会出现无法清除的现象,最终选择了自己用setTimeOut写一个定时器来达到所有东西可控的做法:

首先定时器的方法是使用Taro存储的id实现,那么清除定时器就这样写:

const clearTimePlus = async (text?: string) => {
        console.log(`${text}执行了清除定时器`);
        Taro.setStorageSync('TimerId','');
    };

而设置定时器的函数是:

const setTimeInterval = (fn: Function,second: number,randomNumber: number)=>{
        return setTimeout(async ()=>{
            const TimerId = Taro.getStorageSync('TimerId');
            console.log('TimerId:',TimerId,'randomNumber',randomNumber,+TimerId===randomNumber);
            if(randomNumber&&TimerId&&+TimerId===randomNumber){
                fn();
                setTimeInterval(fn,second,randomNumber);
            }else {
                return
            }
        },second)
    };

使用的时候:

const startTime = async () => {
        await clearTimePlus('startTime');
        setTimeout(async ()=>{
            console.log('已开始计时');
            
            · · · some code
            
            const randomNumber = Math.floor(Math.random()*10000);
            await Taro.setStorageSync('TimerId',randomNumber);
            await setTimeInterval(() => {
                            
            · · · some code
            
            },20000,randomNumber);
        },500)
    };

最终定时器将会在你执行startTime后清除

最后修改:2020 年 11 月 01 日 11 : 33 AM
如果覺得我的文章對你有用,請隨意讚賞