@@ -18,6 +18,7 @@ npm install @open-draft/deferred-promise
18
18
- [ ` deferredProimse.result ` ] ( #deferredpromiseresult )
19
19
- [ ` deferredPromise.resolve() ` ] ( #deferredpromiseresolve )
20
20
- [ ` deferredPromies.reject() ` ] ( #deferredpromisereject )
21
+ - [ ` deferredPromise.finally() ` ] ( #deferredpromisefinally )
21
22
22
23
## Class: ` DeferredPromise `
23
24
@@ -26,9 +27,9 @@ npm install @open-draft/deferred-promise
26
27
Creates a new instance of a deferred promise.
27
28
28
29
``` js
29
- import { DeferredPromise } from ' @open-draft/deferred-promise'
30
+ import { DeferredPromise } from " @open-draft/deferred-promise" ;
30
31
31
- const promise = new DeferredPromise ()
32
+ const promise = new DeferredPromise ();
32
33
```
33
34
34
35
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
40
41
- ` <"pending" | "resolved" | "rejected"> ` ** Default:** ` "pending" `
41
42
42
43
``` js
43
- const promise = new DeferredPromise ()
44
- console .log (promise .state ) // "pending"
44
+ const promise = new DeferredPromise ();
45
+ console .log (promise .state ); // "pending"
45
46
46
- promise .resolve ()
47
- console .log (promise .state ) // "resolved"
47
+ promise .resolve ();
48
+ console .log (promise .state ); // "resolved"
48
49
```
49
50
50
51
### ` deferredPromise.result `
51
52
52
53
Returns the value that has resolved the promise. If no value has been provided to the ` .resolve() ` call, ` undefined ` is returned instead.
53
54
54
55
``` js
55
- const promise = new DeferredPromise ()
56
- promise .resolve (' John' )
56
+ const promise = new DeferredPromise ();
57
+ promise .resolve (" John" );
57
58
58
- console .log (promise .result ) // "John"
59
+ console .log (promise .result ); // "John"
59
60
```
60
61
61
62
### ` deferredPromise.rejectionReason `
62
63
63
64
Returns the reason that has rejected the promise. If no reason has been provided to the ` .reject() ` call, ` undefined ` is returned instead.
64
65
65
66
``` 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" ));
68
69
69
- console .log (promise .rejectionReason ) // Error
70
+ console .log (promise .rejectionReason ); // Error
70
71
```
71
72
72
73
### ` deferredPromise.resolve() `
@@ -75,21 +76,21 @@ Resolves the deferred promise with a given value.
75
76
76
77
``` js
77
78
function startServer () {
78
- const serverReady = new DeferredPromise ()
79
+ const serverReady = new DeferredPromise ();
79
80
80
81
new http.Server ().listen (() => {
81
82
// Resolve the deferred promise with the server address
82
83
// once the server is ready.
83
- serverReady .resolve (' http://localhost:8080' )
84
- })
84
+ serverReady .resolve (" http://localhost:8080" );
85
+ });
85
86
86
87
// Return the deferred promise to the consumer.
87
- return serverReady
88
+ return serverReady;
88
89
}
89
90
90
91
startServer ().then ((address ) => {
91
- console .log (' Server is running at "%s"' , address)
92
- })
92
+ console .log (' Server is running at "%s"' , address);
93
+ });
93
94
```
94
95
95
96
### ` deferredPromise.reject() `
@@ -98,17 +99,30 @@ Rejects the deferred promise with a given reason.
98
99
99
100
``` js
100
101
function createBroadcast () {
101
- const runtimePromise = new DeferredPromise ()
102
+ const runtimePromise = new DeferredPromise ();
102
103
103
- receiver .on (' error' , (error ) => {
104
+ receiver .on (" error" , (error ) => {
104
105
// Reject the deferred promise in response
105
106
// to the incoming "error" event.
106
- runtimePromise .reject (error)
107
- })
107
+ runtimePromise .reject (error);
108
+ });
108
109
109
110
// This deferred promise will be pending forever
110
111
// unless the broadcast channel receives the
111
112
// "error" event that rejects it.
112
- return runtimePromise
113
+ return runtimePromise;
113
114
}
114
115
```
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