aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/oncePromise.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/oncePromise.ts')
-rw-r--r--src/lib/oncePromise.ts16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/lib/oncePromise.ts b/src/lib/oncePromise.ts
index f6ce775..6ce6287 100644
--- a/src/lib/oncePromise.ts
+++ b/src/lib/oncePromise.ts
@@ -10,13 +10,19 @@ const ensurePromise = <T>(maybePromise: T | PromiseLike<T>): Promise<T> =>
? (maybePromise as Promise<T>)
: Promise.resolve(maybePromise);
/** Returns a function that caches successful promises until time runs out, and throws away unsuccessful ones */
-export const oncePromise = <T>(create: () => Promise<T>, timeout = -1) => {
+export const oncePromise = <T>(
+ create: () => Promise<T>,
+ retries = true,
+ timeout = -1
+) => {
let getPromise = (): Promise<T> => {
const oldGetPromise = getPromise,
- promise = ensurePromise(create()).catch((e) => {
- getPromise = oldGetPromise;
- throw e;
- }),
+ promise = retries
+ ? ensurePromise(create()).catch((e) => {
+ getPromise = oldGetPromise;
+ throw e;
+ })
+ : ensurePromise(create()),
expires = timeout > 0 ? performance.now() + timeout : 0;
return (getPromise = expires
? ((() =>