Skip to content

Commit 3e8aef7

Browse files
committed
feat(ensurePromise): add ensurePromise function
1 parent d397736 commit 3e8aef7

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

deno.jsonc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
".": "./mod.ts",
66
"./async-value": "./async_value.ts",
77
"./barrier": "./barrier.ts",
8+
"./ensure-promise": "./ensure_promise.ts",
89
"./lock": "./lock.ts",
910
"./mutex": "./mutex.ts",
1011
"./notify": "./notify.ts",
@@ -34,6 +35,7 @@
3435
"@core/asyncutil": "./mod.ts",
3536
"@core/asyncutil/async-value": "./async_value.ts",
3637
"@core/asyncutil/barrier": "./barrier.ts",
38+
"@core/asyncutil/ensure-promise": "./ensure_promise.ts",
3739
"@core/asyncutil/lock": "./lock.ts",
3840
"@core/asyncutil/mutex": "./mutex.ts",
3941
"@core/asyncutil/notify": "./notify.ts",

ensure_promise.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* Ensure that a value is a promise.
3+
*
4+
* It returns the value if it is already a promise, otherwise it returns a
5+
* promise that resolves to the value.
6+
*
7+
* @param value - The value to ensure as a promise.
8+
* @returns A promise that resolves to the value.
9+
*
10+
* ```ts
11+
* import { assertEquals } from "@std/assert";
12+
* import { ensurePromise } from "@core/asyncutil/ensure-promise";
13+
*
14+
* assertEquals(await ensurePromise(42), 42);
15+
* assertEquals(await ensurePromise(Promise.resolve(42)), 42);
16+
* ```
17+
*/
18+
export function ensurePromise<T>(value: T): Promise<T> {
19+
return value instanceof Promise ? value : Promise.resolve(value);
20+
}

ensure_promise_test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { test } from "@cross/test";
2+
import { assertEquals } from "@std/assert";
3+
import { ensurePromise } from "./ensure_promise.ts";
4+
5+
test("ensurePromise() returns the value if it is already a promise", async () => {
6+
const p = Promise.resolve(42);
7+
assertEquals(await ensurePromise(p), 42);
8+
});
9+
10+
test("ensurePromise() returns a promise that resolves to the value", async () => {
11+
assertEquals(await ensurePromise(42), 42);
12+
});

0 commit comments

Comments
 (0)