From d915e613dc6e9ebb59d1d6480d44e8b2d0fb40eb Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 22 Apr 2020 12:27:39 +0100 Subject: [PATCH] Convert promise utility module to tyepscript Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/utils/{promise.js => promise.ts} | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) rename src/utils/{promise.js => promise.ts} (65%) diff --git a/src/utils/promise.js b/src/utils/promise.ts similarity index 65% rename from src/utils/promise.js rename to src/utils/promise.ts index d7e8d2eae1..553e1e1959 100644 --- a/src/utils/promise.js +++ b/src/utils/promise.ts @@ -1,5 +1,5 @@ /* -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 2020 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,15 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. */ -// @flow - // Returns a promise which resolves with a given value after the given number of ms -export const sleep = (ms: number, value: any): Promise => new Promise((resolve => { setTimeout(resolve, ms, value); })); +export function sleep(ms: number, value: T): Promise { + return new Promise((resolve => { setTimeout(resolve, ms, value); })); +} // Returns a promise which resolves when the input promise resolves with its value // or when the timeout of ms is reached with the value of given timeoutValue -export async function timeout(promise: Promise, timeoutValue: any, ms: number): Promise { - const timeoutPromise = new Promise((resolve) => { +export async function timeout(promise: Promise, timeoutValue: T, ms: number): Promise { + const timeoutPromise = new Promise((resolve) => { const timeoutId = setTimeout(resolve, ms, timeoutValue); promise.then(() => { clearTimeout(timeoutId); @@ -32,12 +32,18 @@ export async function timeout(promise: Promise, timeoutValue: any, ms: number): return Promise.race([promise, timeoutPromise]); } +export interface IDeferred { + resolve: (T) => void; + reject: (any) => void; + promise: Promise; +} + // Returns a Deferred -export function defer(): {resolve: () => {}, reject: () => {}, promise: Promise} { +export function defer(): IDeferred { let resolve; let reject; - const promise = new Promise((_resolve, _reject) => { + const promise = new Promise((_resolve, _reject) => { resolve = _resolve; reject = _reject; }); @@ -46,11 +52,12 @@ export function defer(): {resolve: () => {}, reject: () => {}, promise: Promise} } // Promise.allSettled polyfill until browser support is stable in Firefox -export function allSettled(promises: Promise[]): {status: string, value?: any, reason?: any}[] { +export function allSettled(promises: Promise[]): Promise | ISettledRejected>> { if (Promise.allSettled) { - return Promise.allSettled(promises); + return Promise.allSettled(promises); } + // @ts-ignore - typescript isn't smart enough to see the disjoint here return Promise.all(promises.map((promise) => { return promise.then(value => ({ status: "fulfilled",