@@ -57,6 +57,9 @@ interface UseFeature {
57
57
/**
58
58
* A React Hook that retrieves the status of a feature flag and its variables, optionally
59
59
* auto updating those values based on underlying user or datafile changes.
60
+ *
61
+ * Note: The react client can become ready AFTER the timeout period.
62
+ * ClientReady and DidTimeout provide signals to handle this scenario.
60
63
*/
61
64
export const useFeature : UseFeature = ( featureKey , options = { } , overrides = { } ) => {
62
65
const { isServerSide, optimizely, timeout } = useContext ( OptimizelyContext ) ;
@@ -89,24 +92,23 @@ export const useFeature : UseFeature = (featureKey, options = {}, overrides = {}
89
92
optimizely . onReady ( { timeout : finalReadyTimeout } ) . then ( ( res : OnReadyResult ) => {
90
93
if ( res . success ) {
91
94
// didTimeout=false
92
- setClientReady ( true ) ;
93
95
useFeatureLogger . info ( `feature="${ featureKey } " successfully set for user="${ optimizely . user . id } "` ) ;
94
96
return ;
95
- } else {
96
- setDidTimeout ( true ) ;
97
- useFeatureLogger . info (
98
- `feature="${ featureKey } " could not be set before timeout of ${ finalReadyTimeout } ms, reason="${ res . reason || '' } "` ,
99
- )
100
- return res . dataReadyPromise ! . then (
101
- ( ) => {
102
- setClientReady ( true ) ;
103
- useFeatureLogger . info (
104
- `feature="${ featureKey } " is now set, but after timeout.` ,
105
- ) ;
106
- } ) ;
107
97
}
98
+ setDidTimeout ( true ) ;
99
+ useFeatureLogger . info (
100
+ `feature="${ featureKey } " could not be set before timeout of ${ finalReadyTimeout } ms, reason="${ res . reason || '' } "` ,
101
+ ) ;
102
+ // Since we timed out, wait for the dataReadyPromise to resolve before setting up.
103
+ return res . dataReadyPromise ! . then (
104
+ ( ) => {
105
+ useFeatureLogger . info (
106
+ `feature="${ featureKey } " is now set, but after timeout.` ,
107
+ ) ;
108
+ } ) ;
108
109
} )
109
110
. then ( ( ) => {
111
+ setClientReady ( true ) ;
110
112
setData ( getCurrentValues ( ) ) ;
111
113
if ( options . autoUpdate ) {
112
114
cleanupFns . push (
0 commit comments