-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpromise-chain.bench.ts
More file actions
71 lines (64 loc) · 1.61 KB
/
promise-chain.bench.ts
File metadata and controls
71 lines (64 loc) · 1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import PromiseChain from "./promise-chain.ts";
import { TestClass } from "./stubs/test-class.ts";
const iterate = (
execute: (input: TestClass) => Promise<TestClass>,
) => {
return async () => {
await execute(new TestClass());
};
};
Deno.bench(
"Traditional Async Chain (1 Step)",
{ group: "1 step", baseline: true },
iterate((t) => t.asyncIncrement("propertyOne", 3)),
);
Deno.bench(
"Composable Async Chain (1 Step)",
{ group: "1 step" },
iterate((t) => PromiseChain(t).asyncIncrement("propertyOne", 3)),
);
Deno.bench(
"Traditional Async Chain (2 Steps)",
{ group: "2 steps", baseline: true },
iterate((t) =>
t.asyncIncrement("propertyOne", 3).then((t) =>
t.increment("propertyTwo", 5)
)
),
);
Deno.bench(
"Composable Async Chain (2 Steps)",
{ group: "2 steps" },
iterate((t) =>
PromiseChain(t).asyncIncrement("propertyOne", 3).increment(
"propertyTwo",
5,
)
),
);
Deno.bench(
"Traditional Async Chain (6 Steps)",
{ group: "6 steps", baseline: true },
iterate((t) =>
t
.asyncIncrement("propertyOne", 3)
.then((t) => t.asyncIncrementTwo())
.then((t) => t.asyncIncrementOne())
.then((t) => t.increment("propertyTwo", 5))
.then((t) => t.increment("propertyOne", 2))
.then((t) => t.asyncIncrementOne())
),
);
Deno.bench(
"Composable Async Chain (6 Steps)",
{ group: "6 steps" },
iterate((t) =>
PromiseChain(t)
.asyncIncrement("propertyOne", 3)
.asyncIncrementTwo()
.asyncIncrementOne()
.increment("propertyTwo", 5)
.increment("propertyOne", 2)
.asyncIncrementOne()
),
);