@@ -15,13 +15,18 @@ export interface UseStorageAsyncOptions<T> extends Omit<UseStorageOptions<T>, 's
15
15
* Custom data serialization
16
16
*/
17
17
serializer ?: SerializerAsync < T >
18
+
19
+ /**
20
+ * On first value loaded hook.
21
+ */
22
+ onReady ?: ( value : T ) => void
18
23
}
19
24
20
- export function useStorageAsync ( key : string , initialValue : MaybeRefOrGetter < string > , storage ?: StorageLikeAsync , options ?: UseStorageAsyncOptions < string > ) : RemovableRef < string >
21
- export function useStorageAsync ( key : string , initialValue : MaybeRefOrGetter < boolean > , storage ?: StorageLikeAsync , options ?: UseStorageAsyncOptions < boolean > ) : RemovableRef < boolean >
22
- export function useStorageAsync ( key : string , initialValue : MaybeRefOrGetter < number > , storage ?: StorageLikeAsync , options ?: UseStorageAsyncOptions < number > ) : RemovableRef < number >
23
- export function useStorageAsync < T > ( key : string , initialValue : MaybeRefOrGetter < T > , storage ?: StorageLikeAsync , options ?: UseStorageAsyncOptions < T > ) : RemovableRef < T >
24
- export function useStorageAsync < T = unknown > ( key : string , initialValue : MaybeRefOrGetter < null > , storage ?: StorageLikeAsync , options ?: UseStorageAsyncOptions < T > ) : RemovableRef < T >
25
+ export function useStorageAsync ( key : string , initialValue : MaybeRefOrGetter < string > , storage ?: StorageLikeAsync , options ?: UseStorageAsyncOptions < string > ) : RemovableRef < string > & Promise < RemovableRef < string > >
26
+ export function useStorageAsync ( key : string , initialValue : MaybeRefOrGetter < boolean > , storage ?: StorageLikeAsync , options ?: UseStorageAsyncOptions < boolean > ) : RemovableRef < boolean > & Promise < RemovableRef < boolean > >
27
+ export function useStorageAsync ( key : string , initialValue : MaybeRefOrGetter < number > , storage ?: StorageLikeAsync , options ?: UseStorageAsyncOptions < number > ) : RemovableRef < number > & Promise < RemovableRef < number > >
28
+ export function useStorageAsync < T > ( key : string , initialValue : MaybeRefOrGetter < T > , storage ?: StorageLikeAsync , options ?: UseStorageAsyncOptions < T > ) : RemovableRef < T > & Promise < RemovableRef < T > >
29
+ export function useStorageAsync < T = unknown > ( key : string , initialValue : MaybeRefOrGetter < null > , storage ?: StorageLikeAsync , options ?: UseStorageAsyncOptions < T > ) : RemovableRef < T > & Promise < RemovableRef < T > >
25
30
26
31
/**
27
32
* Reactive Storage in with async support.
@@ -37,7 +42,7 @@ export function useStorageAsync<T extends(string | number | boolean | object | n
37
42
initialValue : MaybeRefOrGetter < T > ,
38
43
storage : StorageLikeAsync | undefined ,
39
44
options : UseStorageAsyncOptions < T > = { } ,
40
- ) : RemovableRef < T > {
45
+ ) : RemovableRef < T > & Promise < RemovableRef < T > > {
41
46
const {
42
47
flush = 'pre' ,
43
48
deep = true ,
@@ -50,6 +55,7 @@ export function useStorageAsync<T extends(string | number | boolean | object | n
50
55
onError = ( e ) => {
51
56
console . error ( e )
52
57
} ,
58
+ onReady,
53
59
} = options
54
60
55
61
const rawInit : T = toValue ( initialValue )
@@ -95,7 +101,12 @@ export function useStorageAsync<T extends(string | number | boolean | object | n
95
101
}
96
102
}
97
103
98
- read ( )
104
+ const promise = new Promise ( ( resolve ) => {
105
+ read ( ) . then ( ( ) => {
106
+ onReady ?.( data . value )
107
+ resolve ( data )
108
+ } )
109
+ } )
99
110
100
111
if ( window && listenToStorageChanges )
101
112
useEventListener ( window , 'storage' , e => Promise . resolve ( ) . then ( ( ) => read ( e ) ) , { passive : true } )
@@ -122,5 +133,10 @@ export function useStorageAsync<T extends(string | number | boolean | object | n
122
133
)
123
134
}
124
135
125
- return data
136
+ Object . assign ( data , {
137
+ then : promise . then . bind ( promise ) ,
138
+ catch : promise . catch . bind ( promise ) ,
139
+ } )
140
+
141
+ return data as RemovableRef < T > & Promise < RemovableRef < T > >
126
142
}
0 commit comments