19
export function waitForState<T>(observable: IObservable<T>, predicate: (state: T) => boolean, isError?: (state: T) => boolean | unknown | undefined, cancellationToken?: CancellationToken): Promise<T>;
20
export function waitForState<T>(observable: IObservable<T>, predicate?: (state: T) => boolean, isError?: (state: T) => boolean | unknown | undefined, cancellationToken?: CancellationToken): Promise<T> {
22
predicate = state => state !== null && state !== undefined;
23
}
25
>
let isImmediateRun = true;
26
>
let shouldDispose = false;
27
>
const stateObs = observable.map(state => {
28
>
/** @description waitForState.state */
29
>
return {
30
>
isFinished: predicate(state),
31
>
error: isError ? isError(state) : false,
32
>
state
33
>
};
34
>
});
35
>
const d = autorun(reader => {
36
>
/** @description waitForState */
37
>
const { isFinished, error, state } = stateObs.read(reader);
38
>
if (isFinished || error) {
39
>
if (isImmediateRun) {
40
// The variable `d` is not initialized yet
41
shouldDispose = true;
43
d.dispose();
44
}
46
reject(error === true ? state : error);
48
resolve(state);
49
}
51
>
});
52
>
if (cancellationToken) {
53
const dc = cancellationToken.onCancellationRequested(() => {
54
d.dispose();