You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1012 B
Markdown

4 years ago
# Abortable promises ⚡
4 years ago
A module for node that lets you run complex sequence of async steps and:
4 years ago
1. Use an external signal to stop the sequence of steps
```typescript
const sleep = promisify((timeout: number, callback: (...args: any[]) => void) =>
setTimeout(callback, timeout)
);
const a = new AbortablePromise(async function* () {
yield await sleep(1000);
console.log("awaited 100");
yield await sleep(2000);
console.log("awaited 200");
yield await sleep(3000);
console.log("awaited 300");
});
setTimeout(() => a.abort(), 1500); // doesn't get to sleep(3000)
```
4 years ago
2. Use an external signal to kill an _already started_ asynchronous step
4 years ago
```typescript
const b = new AbortablePromise(async function* (await_or_abort) {
const ping = await deferedSpawn("ping", ["8.8.8.8"]);
while (true) {
console.log(
await await_or_abort(ping.waitForNextData(), () => {
ping.kill();
})
);
yield;
}
});
setTimeout(() => b.abort(), 5000); // doesn't get to 5th ping
```