收藏
回答

当 setData() 要设置超过 1M 的数据时怎么办?

setData() 的文档中说:

单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。


的确是这样的,当单次设置的数据过大时会失败。

但这种情况怎么避免呢?


想过分批赋值给数组或对象:

let i = 3;


this.setData({


  arr[i]: 'abc',


 obj.i: 'abc'


})

但语法是错的。


文档中还说:

其中 key 可以非常灵活,以数据路径的形式给出,如 array[2].message,a.b.c.d,并且不需要在 this.data 中预先定义。


试验了一下

this.setData({


 "arr[i]": 'abc',


 "obj.i": 'abc'


})


语法没错,但显然 i 只作为一个字符串,而不是变量。


又试了一些拼字符串的方式,语法上都不对

this.setData({


 `arr[${i}]`: 'abc',


 "arr[" + i + "]": 'abc'


})


虽然可以使用这个方式解决变量问题,但 1M 的限制还是在的(没试验,但理论上设置的还是总数据)

const obj


let i = 3


obj[i] = 'abc'


this.setData(arr)



所以想问下在需要设置大量数据时,应该怎么做?


举个实际应用的例子:

瀑布流,当用户一直一直往下拉,大量的数据要怎么处理呢?

回答关注问题邀请回答
收藏

3 个回答

  • 王建
    王建
    2018-01-28

    已经解决了这个问题,谢谢各位。


    可以将大量数据分批设置到 data 中,但是对内存的大量占用尚未测试。


    使用了 ES6 新增的 计算属性名 特性。


    let obj = [];


    const num = 3;


    let i = 'obj[' + num + ']';


    this.setData({

      [i]: 'abc',
    }, function () {
      console.log(this.data)
    })


    输出 data.obj 为:

    Array(4)

    0: undefined

    1: undefined

    2: undefined

    3: 'abc'


    2018-01-28
    有用 1
    回复
  • 2018-01-03

    内存是很宝贵的,加载后面的数据成功后最好把前面的数据删除了。

    ——来自个人公众号“零零糖”的友情回答,欢迎关注~~

    2018-01-03
    有用
    回复
  • 睡前原谅一切
    睡前原谅一切
    2018-01-02

    用户往上拉,然后获取后端的数据 push进数组,再setData一遍,上次有人提到过这种问题,他是往上面拉一页,就删掉最前面那一页,最后不知道实现没有,还有数据太大建议先存储再缓存里,然后拿,超出太多也没办法了,我的数据6w多条。只加载了200多条。

    2018-01-02
    有用
    回复
登录 后发表内容