Skip to content

Commit 5ffac46

Browse files
committed
docs: document ".finally()"
1 parent 8d7a8b5 commit 5ffac46

File tree

1 file changed

+37
-23
lines changed

1 file changed

+37
-23
lines changed

README.md

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ npm install @open-draft/deferred-promise
1818
- [`deferredProimse.result`](#deferredpromiseresult)
1919
- [`deferredPromise.resolve()`](#deferredpromiseresolve)
2020
- [`deferredPromies.reject()`](#deferredpromisereject)
21+
- [`deferredPromise.finally()`](#deferredpromisefinally)
2122

2223
## Class: `DeferredPromise`
2324

@@ -26,9 +27,9 @@ npm install @open-draft/deferred-promise
2627
Creates a new instance of a deferred promise.
2728

2829
```js
29-
import { DeferredPromise } from '@open-draft/deferred-promise'
30+
import { DeferredPromise } from "@open-draft/deferred-promise";
3031

31-
const promise = new DeferredPromise()
32+
const promise = new DeferredPromise();
3233
```
3334

3435
Unlike the regular `Promise`, a deferred promise does not accept the callback function. Instead, you should use [`.resolve()`](#deferredpromiseresolve) and [`.reject()`](#deferredpromisereject) to resolve and reject the promise respectively.
@@ -40,33 +41,33 @@ A deferred promise is fully compatible with the native `Promise`, which means yo
4041
- `<"pending" | "resolved" | "rejected">` **Default:** `"pending"`
4142

4243
```js
43-
const promise = new DeferredPromise()
44-
console.log(promise.state) // "pending"
44+
const promise = new DeferredPromise();
45+
console.log(promise.state); // "pending"
4546

46-
promise.resolve()
47-
console.log(promise.state) // "resolved"
47+
promise.resolve();
48+
console.log(promise.state); // "resolved"
4849
```
4950

5051
### `deferredPromise.result`
5152

5253
Returns the value that has resolved the promise. If no value has been provided to the `.resolve()` call, `undefined` is returned instead.
5354

5455
```js
55-
const promise = new DeferredPromise()
56-
promise.resolve('John')
56+
const promise = new DeferredPromise();
57+
promise.resolve("John");
5758

58-
console.log(promise.result) // "John"
59+
console.log(promise.result); // "John"
5960
```
6061

6162
### `deferredPromise.rejectionReason`
6263

6364
Returns the reason that has rejected the promise. If no reason has been provided to the `.reject()` call, `undefined` is returned instead.
6465

6566
```js
66-
const promise = new DeferredPromise()
67-
promise.reject(new Error('Internal Server Error'))
67+
const promise = new DeferredPromise();
68+
promise.reject(new Error("Internal Server Error"));
6869

69-
console.log(promise.rejectionReason) // Error
70+
console.log(promise.rejectionReason); // Error
7071
```
7172

7273
### `deferredPromise.resolve()`
@@ -75,21 +76,21 @@ Resolves the deferred promise with a given value.
7576

7677
```js
7778
function startServer() {
78-
const serverReady = new DeferredPromise()
79+
const serverReady = new DeferredPromise();
7980

8081
new http.Server().listen(() => {
8182
// Resolve the deferred promise with the server address
8283
// once the server is ready.
83-
serverReady.resolve('http://localhost:8080')
84-
})
84+
serverReady.resolve("http://localhost:8080");
85+
});
8586

8687
// Return the deferred promise to the consumer.
87-
return serverReady
88+
return serverReady;
8889
}
8990

9091
startServer().then((address) => {
91-
console.log('Server is running at "%s"', address)
92-
})
92+
console.log('Server is running at "%s"', address);
93+
});
9394
```
9495

9596
### `deferredPromise.reject()`
@@ -98,17 +99,30 @@ Rejects the deferred promise with a given reason.
9899

99100
```js
100101
function createBroadcast() {
101-
const runtimePromise = new DeferredPromise()
102+
const runtimePromise = new DeferredPromise();
102103

103-
receiver.on('error', (error) => {
104+
receiver.on("error", (error) => {
104105
// Reject the deferred promise in response
105106
// to the incoming "error" event.
106-
runtimePromise.reject(error)
107-
})
107+
runtimePromise.reject(error);
108+
});
108109

109110
// This deferred promise will be pending forever
110111
// unless the broadcast channel receives the
111112
// "error" event that rejects it.
112-
return runtimePromise
113+
return runtimePromise;
113114
}
114115
```
116+
117+
### `deferredPromise.finally()`
118+
119+
Attaches a callback that executes when the deferred promise is settled (resolved or rejected).
120+
121+
```js
122+
const channelReady = new DeferredPromise();
123+
124+
channelReady.finally(async () => {
125+
// Perform a cleanup side-effect once we're done.
126+
await channel.close();
127+
});
128+
```

0 commit comments

Comments
 (0)