收藏
回答

WXS与setInterval BUG问题

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 客户端 6.7.4 2.3.0

- 当前 Bug 的表现(可附上截图)

    在真机上同一页面内 同时使用WXS与setInterval时,WXS内的funtion会重复调用

    在微信开发者工具上并不会出现

    


- 提供一个最简复现 Demo

js代码:

data: {

test: '',

array: [1, 2, 3, 4, 5, 1, 2, 3, 4]

},


onLoad: function(options) {

let _this = this;

setInterval(() => {

console.log("这是计时")

_this.setData({

test: '这是计时'

})

},1000);

},


wxml代码:

<wxs module="m1">

var getMax = function(array) {

var max = undefined;

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

max = max === undefined ?

array[i] :

(max >= array[i] ? max : array[i]);

}

console.log("max", max)

return max;

}

module.exports.getMax = getMax;

</wxs>

<view> {{m1.getMax(array)}} </view>

<view> {{test}} </view>

@官方大神 求意见和建议!!!!

最后一次编辑于  2018-12-05
回答关注问题邀请回答
收藏

6 个回答

  • 2019-05-29

    楼主解决了吗?

    2019-05-29
    有用 1
    回复
  • 2018-12-06

    我个人觉得是setData的渲染机制和页面的生命周期有关,

    先是onload,这个时候,页面才刚开始启动还没有完全渲染出来,

    再来是ready,才是渲染成型的阶段。

    所以我个人猜想应该把定时器写在这里,会表现的好点


    2018-12-06
    有用
    回复
  • 管凯旋
    管凯旋
    2018-12-05

    似乎有点不太合理

    2018-12-05
    有用
    回复
  • 这都申请了
    这都申请了
    2018-12-05

    关注一下

    2018-12-05
    有用
    回复
  • 微盟
    微盟
    2018-12-05

    https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F

    2018-12-05
    有用
    回复
  • 再见,电脑崽
    再见,电脑崽
    2018-12-05

    计时器里的setData会触发页面重新渲染,页面在渲染的时候,就要重新执行你的getMax函数咯。

    2018-12-05
    有用
    回复 10
    • 2018-12-05

      setData会刷新整个页面的重新渲染?

      2018-12-05
      回复
    • 再见,电脑崽
      再见,电脑崽
      2018-12-05回复

      你提供的代码无法重现你所描述的问题。


      是不是不同手机上不一样,我这是模拟器测试正常。

      2018-12-05
      回复
    • 2018-12-05回复再见,电脑崽

      只有真机才会出现 微信开发者不会出现的

      2018-12-05
      回复
    • 再见,电脑崽
      再见,电脑崽
      2018-12-05回复
      onLoad: function() {
          let _this = this;
          setInterval(() => {
              console.log('这是计时')
              _this.setData({
                  ['test']: '这是计时'
              })
          }, 1000);
      }

      你改一下这里再看看

      2018-12-05
      回复
    • 微盟
      微盟
      2018-12-05回复再见,电脑崽

      这样是正常的现象吧?在页面里面调用了 一个function,然后去setData不是应该一直执行么?换个写法

      2018-12-05
      回复
    查看更多(5)
登录 后发表内容