Skip to content

Commit 0609996

Browse files
committed
refactor: waitUntilReady
1 parent ee088a7 commit 0609996

File tree

6 files changed

+82
-61
lines changed

6 files changed

+82
-61
lines changed

WeChat/FeatureProbe.ts

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class FeatureProbe extends TinyEmitter {
3131
private toggles: { [key: string]: FPToggleDetail } | undefined;
3232
private timer?: NodeJS.Timeout;
3333
private timeoutTimer?: NodeJS.Timeout;
34-
private readyPromise: Promise<void>;
34+
private readyPromise: null | Promise<void>;
3535
private status: string;
3636
private storage: IStorageProvider;
3737
private timeoutInterval: number;
@@ -48,14 +48,7 @@ class FeatureProbe extends TinyEmitter {
4848
this.toggles = undefined;
4949
this.status = STATUS.PENDING;
5050
this.storage = new StorageProvider();
51-
52-
this.readyPromise = new Promise((resolve) => {
53-
const onReadyCallback = () => {
54-
this.off(EVENTS.READY, onReadyCallback);
55-
resolve();
56-
};
57-
this.on(EVENTS.READY, onReadyCallback);
58-
});
51+
this.readyPromise = null;
5952
}
6053

6154
public init({
@@ -123,6 +116,33 @@ class FeatureProbe extends TinyEmitter {
123116
}
124117

125118
public waitUntilReady(): Promise<void> {
119+
if (this.readyPromise) {
120+
return this.readyPromise;
121+
}
122+
123+
if (this.status === STATUS.READY) {
124+
return Promise.resolve();
125+
}
126+
127+
if (this.status === STATUS.ERROR) {
128+
return Promise.reject();
129+
}
130+
131+
this.readyPromise = new Promise((resolve, reject) => {
132+
const onReadyCallback = () => {
133+
this.off(EVENTS.READY, onReadyCallback);
134+
resolve();
135+
};
136+
137+
const onErrorCallback = () => {
138+
this.off(EVENTS.ERROR, onErrorCallback);
139+
reject();
140+
};
141+
142+
this.on(EVENTS.READY, onReadyCallback);
143+
this.on(EVENTS.ERROR, onErrorCallback);
144+
});
145+
126146
return this.readyPromise;
127147
}
128148

docs/classes/FPUser.html

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ <h4>Hierarchy</h4>
1818
<ul class="tsd-hierarchy">
1919
<li><span class="target">FPUser</span></li></ul></section><aside class="tsd-sources">
2020
<ul>
21-
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/b61bed0/WeChat/FPUser.ts#L1">WeChat/FPUser.ts:1</a></li></ul></aside>
21+
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/ee088a7/WeChat/FPUser.ts#L1">WeChat/FPUser.ts:1</a></li></ul></aside>
2222
<section class="tsd-panel-group tsd-index-group">
2323
<section class="tsd-panel tsd-index-panel">
2424
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -56,7 +56,7 @@ <h4 class="tsd-parameters-title">Parameters</h4>
5656
<h5><code class="tsd-tag ts-flagOptional">Optional</code> key: <span class="tsd-signature-type">string</span></h5></li></ul></div>
5757
<h4 class="tsd-returns-title">Returns <a href="FPUser.html" class="tsd-signature-type" data-tsd-kind="Class">FPUser</a></h4><aside class="tsd-sources">
5858
<ul>
59-
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/b61bed0/WeChat/FPUser.ts#L5">WeChat/FPUser.ts:5</a></li></ul></aside></li></ul></section></section>
59+
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/ee088a7/WeChat/FPUser.ts#L5">WeChat/FPUser.ts:5</a></li></ul></aside></li></ul></section></section>
6060
<section class="tsd-panel-group tsd-member-group">
6161
<h2>Properties</h2>
6262
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class tsd-is-private"><a id="attrs" class="tsd-anchor"></a>
@@ -68,12 +68,12 @@ <h4>Type declaration</h4>
6868
<li class="tsd-parameter-index-signature">
6969
<h5><span class="tsd-signature-symbol">[</span>key: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]: </span><span class="tsd-signature-type">string</span></h5></li></ul></div><aside class="tsd-sources">
7070
<ul>
71-
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/b61bed0/WeChat/FPUser.ts#L3">WeChat/FPUser.ts:3</a></li></ul></aside></section>
71+
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/ee088a7/WeChat/FPUser.ts#L3">WeChat/FPUser.ts:3</a></li></ul></aside></section>
7272
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class tsd-is-private"><a id="key" class="tsd-anchor"></a>
7373
<h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagPrivate">Private</code> <span>key</span><a href="#key" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
7474
<div class="tsd-signature">key<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources">
7575
<ul>
76-
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/b61bed0/WeChat/FPUser.ts#L2">WeChat/FPUser.ts:2</a></li></ul></aside></section></section>
76+
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/ee088a7/WeChat/FPUser.ts#L2">WeChat/FPUser.ts:2</a></li></ul></aside></section></section>
7777
<section class="tsd-panel-group tsd-member-group">
7878
<h2>Methods</h2>
7979
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="extendAttrs" class="tsd-anchor"></a>
@@ -91,7 +91,7 @@ <h5>attrs: <span class="tsd-signature-symbol">{ </span><br/><span>    </span
9191
<h5><span class="tsd-signature-symbol">[</span>key: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]: </span><span class="tsd-signature-type">string</span></h5></li></ul></li></ul></div>
9292
<h4 class="tsd-returns-title">Returns <a href="FPUser.html" class="tsd-signature-type" data-tsd-kind="Class">FPUser</a></h4><aside class="tsd-sources">
9393
<ul>
94-
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/b61bed0/WeChat/FPUser.ts#L23">WeChat/FPUser.ts:23</a></li></ul></aside></li></ul></section>
94+
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/ee088a7/WeChat/FPUser.ts#L23">WeChat/FPUser.ts:23</a></li></ul></aside></li></ul></section>
9595
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="get" class="tsd-anchor"></a>
9696
<h3 class="tsd-anchor-link"><span>get</span><a href="#get" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
9797
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -104,7 +104,7 @@ <h4 class="tsd-parameters-title">Parameters</h4>
104104
<h5>attrName: <span class="tsd-signature-type">string</span></h5></li></ul></div>
105105
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
106106
<ul>
107-
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/b61bed0/WeChat/FPUser.ts#L30">WeChat/FPUser.ts:30</a></li></ul></aside></li></ul></section>
107+
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/ee088a7/WeChat/FPUser.ts#L30">WeChat/FPUser.ts:30</a></li></ul></aside></li></ul></section>
108108
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="getAttrs" class="tsd-anchor"></a>
109109
<h3 class="tsd-anchor-link"><span>get<wbr/>Attrs</span><a href="#getAttrs" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
110110
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -115,15 +115,15 @@ <h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{ </spa
115115
<li class="tsd-parameter-index-signature">
116116
<h5><span class="tsd-signature-symbol">[</span>key: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]: </span><span class="tsd-signature-type">string</span></h5></li></ul><aside class="tsd-sources">
117117
<ul>
118-
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/b61bed0/WeChat/FPUser.ts#L19">WeChat/FPUser.ts:19</a></li></ul></aside></li></ul></section>
118+
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/ee088a7/WeChat/FPUser.ts#L19">WeChat/FPUser.ts:19</a></li></ul></aside></li></ul></section>
119119
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="getKey" class="tsd-anchor"></a>
120120
<h3 class="tsd-anchor-link"><span>get<wbr/>Key</span><a href="#getKey" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
121121
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
122122
<li class="tsd-signature tsd-anchor-link" id="getKey.getKey-1">get<wbr/>Key<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><a href="#getKey.getKey-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
123123
<li class="tsd-description">
124124
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
125125
<ul>
126-
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/b61bed0/WeChat/FPUser.ts#L15">WeChat/FPUser.ts:15</a></li></ul></aside></li></ul></section>
126+
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/ee088a7/WeChat/FPUser.ts#L15">WeChat/FPUser.ts:15</a></li></ul></aside></li></ul></section>
127127
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="stableRollout" class="tsd-anchor"></a>
128128
<h3 class="tsd-anchor-link"><span>stable<wbr/>Rollout</span><a href="#stableRollout" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
129129
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -136,7 +136,7 @@ <h4 class="tsd-parameters-title">Parameters</h4>
136136
<h5>key: <span class="tsd-signature-type">string</span></h5></li></ul></div>
137137
<h4 class="tsd-returns-title">Returns <a href="FPUser.html" class="tsd-signature-type" data-tsd-kind="Class">FPUser</a></h4><aside class="tsd-sources">
138138
<ul>
139-
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/b61bed0/WeChat/FPUser.ts#L34">WeChat/FPUser.ts:34</a></li></ul></aside></li></ul></section>
139+
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/ee088a7/WeChat/FPUser.ts#L34">WeChat/FPUser.ts:34</a></li></ul></aside></li></ul></section>
140140
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="with" class="tsd-anchor"></a>
141141
<h3 class="tsd-anchor-link"><span>with</span><a href="#with" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
142142
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -151,7 +151,7 @@ <h5>attrName: <span class="tsd-signature-type">string</span></h5></li>
151151
<h5>attrValue: <span class="tsd-signature-type">string</span></h5></li></ul></div>
152152
<h4 class="tsd-returns-title">Returns <a href="FPUser.html" class="tsd-signature-type" data-tsd-kind="Class">FPUser</a></h4><aside class="tsd-sources">
153153
<ul>
154-
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/b61bed0/WeChat/FPUser.ts#L10">WeChat/FPUser.ts:10</a></li></ul></aside></li></ul></section></section></div>
154+
<li>Defined in <a href="https://github.com/FeatureProbe/client-sdk-miniprogram/blob/ee088a7/WeChat/FPUser.ts#L10">WeChat/FPUser.ts:10</a></li></ul></aside></li></ul></section></section></div>
155155
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
156156
<div class="tsd-navigation settings">
157157
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">

0 commit comments

Comments
 (0)