summaryrefslogtreecommitdiff
path: root/examples/02-fibonacci/index.ts
diff options
context:
space:
mode:
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)
+ }
+}