Skip to content

Commit 7b046e7

Browse files
authored
Merge pull request #2 from jsr-core/remove-promise
feat!: remove Promise support from tryOr and tryOrElse
2 parents 89b5595 + 98fa40b commit 7b046e7

File tree

4 files changed

+24
-102
lines changed

4 files changed

+24
-102
lines changed

try_or.ts

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,17 @@
1-
import { tryOrElse } from "./try_or_else.ts";
21
/**
3-
* Try to execute a function and return the result or a default value.
2+
* Try to execute a function and return the result or a default value if an error occurs.
43
*
54
* ```ts
65
* import { tryOr } from "@core/errorutil/try-or";
7-
* import { raise } from "@core/errorutil/raise";
86
*
9-
* // Sync
107
* console.log(tryOr(() => 1, 2)); // 1
11-
* console.log(tryOr(() => raise("err"), 2)); // 2
12-
*
13-
* // Async
14-
* console.log(await tryOr(() => Promise.resolve(1), 2)); // 1
15-
* console.log(await tryOr(() => Promise.reject("err"), 2)); // 2
8+
* console.log(tryOr(() => { throw "err"; }, 2)); // 2
169
* ```
1710
*/
18-
export function tryOr<T>(fn: () => T, orValue: T): T;
19-
export function tryOr<T>(
20-
fn: () => Promise<T>,
21-
orValue: T | Promise<T>,
22-
): Promise<T>;
23-
export function tryOr<T>(
24-
fn: () => T | Promise<T>,
25-
orValue: T,
26-
): T | Promise<T> {
27-
return tryOrElse(fn, () => orValue);
11+
export function tryOr<T>(fn: () => T, orValue: T): T {
12+
try {
13+
return fn();
14+
} catch {
15+
return orValue;
16+
}
2817
}

try_or_else.ts

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,16 @@
11
/**
2-
* Try to execute a function and return the result or execute another function.
2+
* Try to execute a function and return the result or execute another function and return its result if an error occurs.
33
*
44
* ```ts
55
* import { tryOrElse } from "@core/errorutil/try-or-else";
6-
* import { raise } from "@core/errorutil/raise";
76
*
8-
* // Sync
97
* console.log(tryOrElse(() => 1, () => 2)); // 1
10-
* console.log(tryOrElse(() => raise("err"), () => 2)); // 2
11-
*
12-
* // Async
13-
* console.log(await tryOrElse(() => Promise.resolve(1), () => 2)); // 1
14-
* console.log(await tryOrElse(() => Promise.reject("err"), () => 2)); // 2
8+
* console.log(tryOrElse(() => { throw "err" }, () => 2)); // 2
159
* ```
1610
*/
17-
export function tryOrElse<T>(fn: () => T, elseFn: (err: unknown) => T): T;
18-
export function tryOrElse<T>(
19-
fn: () => Promise<T>,
20-
elseFn: (err: unknown) => T | Promise<T>,
21-
): Promise<T>;
22-
export function tryOrElse<T>(
23-
fn: () => T | Promise<T>,
24-
elseFn: (err: unknown) => T | Promise<T>,
25-
): T | Promise<T> {
11+
export function tryOrElse<T>(fn: () => T, elseFn: (err: unknown) => T): T {
2612
try {
27-
const ret = fn();
28-
if (ret instanceof Promise) {
29-
return ret.catch((err) => elseFn(err));
30-
}
31-
return ret;
13+
return fn();
3214
} catch (err) {
3315
return elseFn(err);
3416
}

try_or_else_test.ts

Lines changed: 8 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,20 @@
11
import { test } from "@cross/test";
2-
import { assertEquals, assertRejects, assertThrows } from "@std/assert";
2+
import { assertEquals, assertThrows } from "@std/assert";
33
import { raise } from "./raise.ts";
44
import { tryOrElse } from "./try_or_else.ts";
55

6-
const err = new Error("error");
7-
const resolve = Promise.resolve.bind(Promise);
8-
const reject = Promise.reject.bind(Promise);
9-
10-
await test("tryOrElse (sync)", () => {
11-
type T = number;
12-
assertEquals(tryOrElse((): T => 1, () => 2), 1);
13-
assertEquals(tryOrElse((): T => raise(err), () => 2), 2);
14-
});
15-
16-
await test("tryOrElse with Error (sync)", () => {
17-
type T = number;
18-
assertThrows(
19-
() => tryOrElse((): T => raise(err), () => raise(err)),
20-
Error,
21-
"error",
22-
);
6+
await test("tryOrElse executes the first function and return the result", () => {
7+
assertEquals(tryOrElse(() => 1, () => 2), 1);
238
});
249

25-
await test("tryOrElse (async)", async () => {
26-
type T = Promise<number>;
27-
assertEquals(await tryOrElse((): T => resolve(1), () => 2), 1);
28-
assertEquals(await tryOrElse((): T => resolve(1), () => resolve(2)), 1);
29-
assertEquals(await tryOrElse((): T => reject(err), () => 2), 2);
30-
assertEquals(await tryOrElse((): T => reject(err), () => resolve(2)), 2);
31-
assertEquals(await tryOrElse((): T => raise(err), () => 2), 2);
32-
assertEquals(await tryOrElse((): T => raise(err), () => resolve(2)), 2);
10+
await test("tryOrElse executes the second function and return the result if the first function throws error", () => {
11+
assertEquals(tryOrElse(() => raise("err"), () => 2), 2);
3312
});
3413

35-
await test("tryOrElse with Error (async)", async () => {
36-
type T = Promise<number>;
37-
await assertRejects(
38-
() => tryOrElse((): T => reject(err), () => reject(err)),
39-
Error,
40-
"error",
41-
);
42-
await assertRejects(
43-
() => tryOrElse((): T => reject(err), () => raise(err)),
44-
Error,
45-
"error",
46-
);
47-
await assertRejects(
48-
() => tryOrElse((): T => raise(err), () => reject(err)),
49-
Error,
50-
"error",
51-
);
14+
await test("tryOrElse throws error if the second function throws error", () => {
5215
assertThrows(
53-
() => tryOrElse((): T => raise(err), () => raise(err)),
16+
() => tryOrElse(() => raise("err1"), () => raise(new Error("err2"))),
5417
Error,
55-
"error",
18+
"err2",
5619
);
5720
});

try_or_test.ts

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,10 @@ import { assertEquals } from "@std/assert";
33
import { raise } from "./raise.ts";
44
import { tryOr } from "./try_or.ts";
55

6-
const err = new Error("error");
7-
const resolve = Promise.resolve.bind(Promise);
8-
const reject = Promise.reject.bind(Promise);
9-
10-
await test("tryOr (sync)", () => {
11-
type T = number;
12-
assertEquals(tryOr((): T => 1, 2), 1);
13-
assertEquals(tryOr((): T => raise(err), 2), 2);
6+
await test("tryOr executes the function and return the result", () => {
7+
assertEquals(tryOr(() => 1, 2), 1);
148
});
159

16-
await test("tryOr (async)", async () => {
17-
type T = Promise<number>;
18-
assertEquals(await tryOr((): T => resolve(1), 2), 1);
19-
assertEquals(await tryOr((): T => resolve(1), resolve(2)), 1);
20-
assertEquals(await tryOr((): T => reject(err), 2), 2);
21-
assertEquals(await tryOr((): T => reject(err), resolve(2)), 2);
22-
assertEquals(await tryOr((): T => raise(err), 2), 2);
23-
assertEquals(await tryOr((): T => raise(err), resolve(2)), 2);
10+
await test("tryOr returns the orValue if the function throws error", () => {
11+
assertEquals(tryOr(() => raise("err"), 2), 2);
2412
});

0 commit comments

Comments
 (0)