缓存问题大家帮我解释下,有点蒙
发布于 5 年前 作者 weizou 6100 次浏览 来自 问答

就是一个循环,要是条件不满足就一直走下去,但是跳转了页面它还走,所以我想把他停止了,就用了从缓存里面去取一个值来结束他,当返回到上级页面的时候,缓存值重新被赋值为1,但是正在后台死循环的这个函数打印出来一直是0 还是结束不了

<navigator class="kuang" url="../gerenyemian/grzym/qiang/qiang">

 <image class ="gr_image" mode="aspectFit" src="../../image/qiang.png"></image>

  <view class="text">吐槽表白弹幕墙</view>

  <view class="right-arrow"></view>

 </navigator>

上面是跳转到这个死循环的方式。

onShow: function(){

   wx.setStorageSync('pd', 1);

   console.log("xiugai",wx.getStorageSync('pd'));

 }

上面是返回的时候从父页面的onshow方法里改变缓存的值

for (var i = 0; i < qiang.length; i++) {

 

            doommList.push(new Doomm(qiang[i].text, Math.ceil(Math.random() * 100), Math.ceil(Math.random() * 10), qiang[i].color, qiang[i]._id));

            page.setData({

              doommData: doommList

            })

            console.log("xunhuan ",wx.getStorageSync('pd'));

            if (wx.getStorageSync('pd')>0){

            break;

           }

             

          }

上面是死循环的一个函数,doommList.push这个处理东西的可以忽略

2 回复

单纯看你的第三断代码是不可能无限循环的,除非你还有函数不停地执行第三断代码,js是单线程的,wx.setStorageSyncwx.getStorageSync是同步的,这两个过不了,后面的所有代码就执行不了了,很可能这里出问题了,应该要按官方例子那样写:

try {

    wx.setStorageSync(‘pd’, 1);

} catch (e) {}

let pd = null;

try {

    pd = wx.getStorageSync(‘pd’);

} catch (e) {}

console.log(pd);

onUnload () {

    this.timer && clearTimeout(this.timer);

},

setDoomm () {

    let doommList = this.data.doommList;

    let qiang = this.data.qiang;

    for (var i = 0; i < qiang.length; i++) {

        doommList.push(new Doomm(qiang[i].text, Math.ceil(Math.random() * 100), Math.ceil(Math.random() * 10), qiang[i].color, qiang[i]._id));

    }

    // 此处有问题,不应该写在上面循环体里面,性能优化

    this.setData({ doommData: doommList });

},

// 假设此处为你不停执行的函数,类似不停执行请求的函数

getQiang () {

    this.timer = setInterval(() => {

        this.setData(qiang: qiang, () => {

            this.setDoomm();

        });

    }, 1);

}

回到顶部