@@ -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
2627Creates 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
3435Unlike 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
5253Returns 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
6364Returns 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
7778function 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
9091startServer ().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
100101function 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