Skip to content

Commit 71c98e4

Browse files
authored
Created: Design Cancellable Function - Solution
1 parent 2a29d44 commit 71c98e4

1 file changed

Lines changed: 22 additions & 0 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const cancellable = (generator) => {
2+
let cancel;
3+
const cancelPromise = new Promise((_, reject) => {
4+
cancel = () => reject("Cancelled");
5+
});
6+
// Every Promise rejection has to be caught.
7+
cancelPromise.catch(() => {});
8+
9+
const promise = (async () => {
10+
let next = generator.next();
11+
while (!next.done) {
12+
try {
13+
next = generator.next(await Promise.race([next.value, cancelPromise]));
14+
} catch (e) {
15+
next = generator.throw(e);
16+
}
17+
}
18+
return next.value;
19+
})();
20+
21+
return [cancel, promise];
22+
};

0 commit comments

Comments
 (0)