首页 > 解决方案 > 反应原生异步存储 | 行太大,无法放入 CursorWindow

问题描述

AsyncStorage在 ReactNative 中使用在设备上存储一些数据(大尺​​寸 >2MB),然后使用以下代码读取它

try {
   const value = await AsyncStorage.getItem('date_stored_copy');
} catch (e) {
   console.log(e);
}

我收到以下错误:

行太大,无法放入 CursorWindow requiredPos=0, totalRows=1...

有没有办法增加 CursorWindow 的大小,或者 AsyncStorage 的另一种选择?

标签: sqlitereact-nativeasyncstorage

解决方案


另一种解决方案是将数据分成块然后写入。

我编写了一个使用 AsyncStorage 的包装器,它正是这样做的:https ://gist.github.com/bureyburey/2345dfa88a31e00a514479be37848d42

请注意,它最初是为与 apollo-cache-persist(apollo-client 的持久性库)一起使用而编写的。而且由于 graphql 将数据存储在一个非常扁平的结构中,这个解决方案开箱即用的效果很好。

对于您的情况,如果您存储的对象如下所示:

{
    data: { a lot of data here }
}

那么这并不重要,包装器也不起作用

但是如果你的对象看起来像这样:

{
    someData: { partial data },
    someMoreData: { more partial data },
    ....
}

然后理论上它应该工作。

全面披露:我还没有彻底测试它,只用 apollo-cache-persist


推荐阅读