-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStorageOpt.js
106 lines (96 loc) · 4.04 KB
/
StorageOpt.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import { AsyncStorage } from 'react-native';
import Storage from 'react-native-storage';
let storage = new Storage({
// 最大容量,默认值1000条数据循环存储
size: 1000,
// 存储引擎:对于RN使用AsyncStorage,对于web使用window.localStorage
// 如果不指定则数据只会保存在内存中,重启后即丢失
storageBackend: AsyncStorage,
// 数据过期时间,默认一整天(1000 * 3600 * 24 毫秒),设为null则永不过期,通常保存数据是不设置有效期的
defaultExpires: null,//1000 * 3600 * 24,
// 读写时在内存中缓存数据。默认启用。
enableCache: true, // 你可以在构造函数这里就写好sync的方法 // 或是在任何时候,直接对storage.sync进行赋值修改 // 或是写到另一个文件里,这里require引入
// 如果storage中没有相应数据,或数据已过期,
// 则会调用相应的sync方法,无缝返回最新数据。
// sync方法的具体说明会在后文提到
// 你可以在构造函数这里就写好sync的方法
// 或是在任何时候,直接对storage.sync进行赋值修改
// 或是写到另一个文件里,这里require引入
//sync: require('./RNSync.js').syncdata,//require('你可以另外写一个文件专门处理sync'),
});
export default class StorageOpt {
/**
* 保存数据
* @param key 键
* @param data 值
* @param expires 有效时间
*/
// 使用key来保存数据(key-only)。这些数据一般是全局独有的,需要谨慎单独处理的数据
// 批量数据请使用key和id来保存(key-id),具体请往后看
// 除非你手动移除,这些数据会被永久保存,而且默认不会过期。
static save(key, data, expires){
storage.save({
key: key, // 注意:请不要在key中使用_下划线符号!
data: data,
// 如果不指定过期时间,则会使用defaultExpires参数
// 如果设为null,则永不过期
expires: expires
});
}
/**
* 读取数据
* @param key 键
* @param callBack 回调函数
*/
static loaddata(key, callBack){
storage.load({
key: key,
// autoSync(默认为true)意味着在没有找到数据或数据过期时自动调用相应的sync方法
autoSync: true,
// syncInBackground(默认为true)意味着如果数据过期,
// 在调用sync方法的同时先返回已经过期的数据。
// 设置为false的话,则始终强制返回sync方法提供的最新数据(当然会需要更多等待时间)。
syncInBackground: true,
// 你还可以给sync方法传递额外的参数
syncParams: {
extraFetchOptions: {
// 各种参数
},
someFlag: true,
},
}).then(ret => {
// 如果找到数据,则在then方法中返回
// 注意:这是异步返回的结果(不了解异步请自行搜索学习)
// 你只能在then这个方法内继续处理ret数据
// 而不能在then以外处理
// 也没有办法“变成”同步返回
// 你也可以使用“看似”同步的async/await语法
callBack(ret);
//return ret;
}).catch(err => {
//如果没有找到数据且没有sync方法,
//或者有其他异常,则在catch中返回
// console.warn(err.message);
switch (err.name) {
case 'NotFoundError':
// TODO;
break;
case 'ExpiredError':
// TODO
break;
}
//没找到数据返回空
callBack('');
});
}
/**
* 删除数据
* @param key 键
*/
static delete(key){
// 删除单个数据
storage.remove({
key: key
});
}
}