|
14 | 14 | * limitations under the License.
|
15 | 15 | */
|
16 | 16 |
|
17 |
| - let items: {[key: string]: string} = {} |
18 | 17 | export default class AsyncStorage {
|
19 |
| - static getItem(key: string, callback?: (error?: Error, result?: string) => void): Promise<string | null> { |
20 |
| - return new Promise((resolve, reject) => { |
21 |
| - switch (key) { |
22 |
| - case 'keyThatExists': |
23 |
| - resolve('{ "name": "Awesome Object" }') |
24 |
| - break |
25 |
| - case 'keyThatDoesNotExist': |
26 |
| - resolve(null) |
27 |
| - break |
28 |
| - case 'keyWithInvalidJsonObject': |
29 |
| - resolve('bad json }') |
30 |
| - break |
31 |
| - default: |
32 |
| - setTimeout(() => resolve(items[key] || null), 1) |
33 |
| - } |
34 |
| - }) |
| 18 | + private static items: Record<string, string> = {}; |
| 19 | + |
| 20 | + static getItem( |
| 21 | + key: string, |
| 22 | + callback?: (error?: Error, result?: string | null) => void |
| 23 | + ): Promise<string | null> { |
| 24 | + return new Promise((resolve) => { |
| 25 | + setTimeout(() => { |
| 26 | + const value = AsyncStorage.items[key] || null; |
| 27 | + callback?.(undefined, value); |
| 28 | + resolve(value); |
| 29 | + }, 1); |
| 30 | + }); |
35 | 31 | }
|
36 | 32 |
|
37 |
| - static setItem(key: string, value: string, callback?: (error?: Error) => void): Promise<void> { |
| 33 | + static setItem( |
| 34 | + key: string, |
| 35 | + value: string, |
| 36 | + callback?: (error?: Error) => void |
| 37 | + ): Promise<void> { |
38 | 38 | return new Promise((resolve) => {
|
39 | 39 | setTimeout(() => {
|
40 |
| - items[key] = value |
41 |
| - resolve() |
42 |
| - }, 1) |
43 |
| - }) |
| 40 | + AsyncStorage.items[key] = value; |
| 41 | + callback?.(undefined); |
| 42 | + resolve(); |
| 43 | + }, 1); |
| 44 | + }); |
44 | 45 | }
|
45 | 46 |
|
46 |
| - static removeItem(key: string, callback?: (error?: Error, result?: string) => void): Promise<string | null> { |
47 |
| - return new Promise(resolve => { |
| 47 | + static removeItem( |
| 48 | + key: string, |
| 49 | + callback?: (error?: Error, result?: string | null) => void |
| 50 | + ): Promise<string | null> { |
| 51 | + return new Promise((resolve) => { |
48 | 52 | setTimeout(() => {
|
49 |
| - items[key] && delete items[key] |
50 |
| - // @ts-ignore |
51 |
| - resolve() |
52 |
| - }, 1) |
53 |
| - }) |
| 53 | + const value = AsyncStorage.items[key] || null; |
| 54 | + if (key in AsyncStorage.items) { |
| 55 | + delete AsyncStorage.items[key]; |
| 56 | + } |
| 57 | + callback?.(undefined, value); |
| 58 | + resolve(value); |
| 59 | + }, 1); |
| 60 | + }); |
54 | 61 | }
|
55 | 62 |
|
56 |
| - static dumpItems(): {[key: string]: string} { |
57 |
| - return items |
| 63 | + static dumpItems(): Record<string, string> { |
| 64 | + return { ...AsyncStorage.items }; // Return a copy for immutability |
58 | 65 | }
|
59 |
| - |
60 |
| - static clearStore(): void { |
61 |
| - items = {} |
| 66 | + |
| 67 | + static clearStore(): Promise<void> { |
| 68 | + return new Promise((resolve) => { |
| 69 | + setTimeout(() => { |
| 70 | + AsyncStorage.items = {}; |
| 71 | + resolve(); |
| 72 | + }, 1); |
| 73 | + }); |
62 | 74 | }
|
63 | 75 | }
|
0 commit comments