Skip to content

Commit 7b6c261

Browse files
committed
快应用新增storage同步接口
1 parent 1d4a705 commit 7b6c261

File tree

1 file changed

+151
-0
lines changed

1 file changed

+151
-0
lines changed
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
- 提案时间: 2023-05-26
2+
- 影响版本: 1300
3+
- 相关 Issues: 无
4+
5+
## 【必填】概述
6+
7+
数据存储storage增加同步调用能力。
8+
9+
## 【必填】动机
10+
11+
简化开发者在同步场景下开发工作,提供多种接口适应不同场景。
12+
13+
## 【必填】API规格和使用案例
14+
15+
#### 接口定义
16+
17+
storage.getSync(OBJECT)
18+
19+
同步方法,读取存储内容。同步方法会阻塞js线程,注意避免连续多次调用。
20+
21+
参数:
22+
23+
| 参数名 | 类型 | 必填 | 说明 |
24+
| :-----: | :----: | :--: | :----------------------------------------------------------: |
25+
| key | String || 索引 |
26+
| default | String || 如果 key 不存在,返回 default。如果 default 未指定,返回长度为 0 的空字符串 |
27+
28+
success 返回值:
29+
30+
key 对应的存储内容
31+
32+
##### 代码案例
33+
\```javascript
34+
var result = storage.getSync({
35+
key: 'A1'
36+
})
37+
\```
38+
39+
storage.setSync(OBJECT)
40+
41+
同步方法修改存储内容。同步方法会阻塞JS线程,后续同步JS代码会等待该方法执行完毕后才继续执行。
42+
43+
参数:
44+
45+
| 参数名 | 类型 | 必填 | 说明 |
46+
| -------- | -------- | ---- | ------------------------------------------------------------ |
47+
| key | String || 索引 |
48+
| value | String || 新值。如果新值是长度为 0 的空字符串,会删除以 key 为索引的数据项 |
49+
| success | Function || 成功回调 |
50+
| fail | Function || 失败回调 |
51+
| complete | Function || 执行结束后的回调 |
52+
53+
##### 代码案例:
54+
55+
\```javascript
56+
storage.setSync({
57+
key: 'A1',
58+
value: 'V1'
59+
})
60+
\```
61+
62+
storage.clearSync(OBJECT)
63+
64+
同步方法清空存储内容。同步方法会阻塞js线程,后续同步JS代码会等待该方法执行完毕后才继续执行。
65+
66+
参数:
67+
68+
| 参数名 | 类型 | 必填 | 说明 |
69+
| -------- | -------- | ---- | ---------------- |
70+
| success | Function || 成功回调 |
71+
| fail | Function || 失败回调 |
72+
| complete | Function || 执行结束后的回调 |
73+
74+
##### 代码案例
75+
76+
\```javascript
77+
storage.clearSync()
78+
\```
79+
80+
storage.deleteSync(OBJECT)
81+
82+
同步方法删除存储内容。同步方法会阻塞js线程,后续同步JS代码会等待该方法执行完毕后才继续执行。
83+
84+
参数:
85+
86+
| 参数名 | 类型 | 必填 | 说明 |
87+
| -------- | -------- | ---- | ---------------- |
88+
| key | String || 索引 |
89+
| success | Function || 成功回调 |
90+
| fail | Function || 失败回调 |
91+
| complete | Function || 执行结束后的回调 |
92+
93+
##### 代码案例
94+
95+
\```javascript
96+
storage.deleteSync({
97+
key: 'A1'
98+
})
99+
\```
100+
101+
storage.keySync(OBJECT) `1050+`
102+
103+
同步方法返回存储中某个 index 的键名。同步方法会阻塞js线程,后续同步JS代码会等待该方法执行完毕后才继续执行。
104+
105+
参数:
106+
107+
| 参数名 | 类型 | 必填 | 说明 |
108+
| -------- | -------- | ---- | ---------------------- |
109+
| index | Number || 要查询的键名对应的索引 |
110+
| success | Function || 成功回调 |
111+
| fail | Function || 失败回调 |
112+
| complete | Function || 执行结束后的回调 |
113+
114+
success 返回值:
115+
116+
index 对应的键名
117+
118+
##### 代码案例
119+
120+
\```javascript
121+
var result =storage.keySync({
122+
index: 0
123+
})
124+
\```
125+
126+
127+
## 【必填】提案人员是否愿意自行实现该功能
128+
129+
*是:提案人员愿意在提案通过后自行实现该功能;
130+
131+
## 详细设计
132+
133+
可选,请向一个熟悉 hapjs内部实现的人讲解如何在 hapjs中实现这个功能,或讲解实现这一功能需要什么步骤。
134+
135+
## 缺陷
136+
137+
我们是不是可以不做这个功能,请考虑:
138+
139+
- 实现这个功能的投入:包括代码的复杂度、代码体积的增加、实现功能投入的人力
140+
- 这个功能是不是不需要 hapjs提供,使用 hapjs的开发者也可以在应用层实现,甚至实现得更好
141+
- 对 hapjs既有惯用开发习惯的影响
142+
- 对已发布版本和现有功能的影响,以及用户进行迁移的成本
143+
- 对其它未有代码实现的 RFC 提案的影响
144+
145+
## 替代选择
146+
147+
还有其他的方案也可以实现这个功能吗?
148+
149+
## 适配策略
150+
151+
如果我们实现了这个提案,有没有什么办法可以帮助开发者更好地适应这个改动?

0 commit comments

Comments
 (0)