Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / drive-store / utils / async.ts
blob18908d9e94039def2a6c47da835714c0ffb2828e
1 /**
2  * Waits for specific condition to be true.
3  * The promise is rejected if the signal is aborted.
4  */
5 export const waitUntil = (conditionFn: () => boolean, abortSignal?: AbortSignal) => {
6     return new Promise<void>((resolve, reject) => {
7         const waitForCondition = () => {
8             if (abortSignal?.aborted) {
9                 return reject(new Error('Wait aborted'));
10             }
11             if (conditionFn()) {
12                 return resolve();
13             }
14             setTimeout(waitForCondition, 50);
15         };
17         waitForCondition();
18     });
21 export const getSuccessfulSettled = <T>(results: PromiseSettledResult<T>[]) => {
22     const values: T[] = [];
23     results.forEach((result) => {
24         if (result.status === 'fulfilled') {
25             values.push(result.value);
26         } else {
27             console.error(result.reason);
28         }
29     });
30     return values;
33 export const logSettledErrors = <T>(results: PromiseSettledResult<T>[]) => {
34     results.forEach((result) => {
35         if (result.status === 'rejected') {
36             console.error(result.reason);
37         }
38     });