summaryrefslogtreecommitdiff
path: root/examples/02-fibonacci/index.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-08-20 13:31:04 +0200
committerFlorian Dold <florian@dold.me>2021-08-20 13:31:04 +0200
commitf066f2ae56968020d986fbd79bf20f583e2ea6f8 (patch)
tree4e647c33afab65947cc5dfece08ec13d0507a4bb /examples/02-fibonacci/index.ts
downloadnode-vendor-f066f2ae56968020d986fbd79bf20f583e2ea6f8.tar.gz
node-vendor-f066f2ae56968020d986fbd79bf20f583e2ea6f8.tar.bz2
node-vendor-f066f2ae56968020d986fbd79bf20f583e2ea6f8.zip
Squashed 'cancellationtoken/' content from commit 3e4d826
git-subtree-dir: cancellationtoken git-subtree-split: 3e4d826d0b0f421cbc303942142f281b25a8021f
Diffstat (limited to 'examples/02-fibonacci/index.ts')
-rw-r--r--examples/02-fibonacci/index.ts24
1 files changed, 24 insertions, 0 deletions
diff --git a/examples/02-fibonacci/index.ts b/examples/02-fibonacci/index.ts
new file mode 100644
index 0000000..3617495
--- /dev/null
+++ b/examples/02-fibonacci/index.ts
@@ -0,0 +1,24 @@
+import CancellationToken from 'cancellationtoken'
+
+const {cancel, token} = CancellationToken.create()
+fibonacci((n, fib) => {
+ console.log(`F(${n}) = ${fib}`)
+ if (n >= 9) cancel()
+}, token)
+
+// keep passing n and F(n) to the callback until the token is cancelled
+function fibonacci(cb: (n: number, fib: number) => void, token: CancellationToken): void {
+ let n: number = 0
+ let fib: number = 1
+ let next: number = 1
+
+ setTimeout(generateNext, 0)
+
+ function generateNext() {
+ if (token.isCancelled) return
+ cb(n, fib)
+ ;[fib, next] = [next, fib + next]
+ ++n
+ setTimeout(generateNext, 0)
+ }
+}