File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ module.exports = {
66 ...require ( './lib/datetime.js' ) ,
77 ...require ( './lib/error.js' ) ,
88 ...require ( './lib/events.js' ) ,
9+ ...require ( './lib/future.js' ) ,
910 ...require ( './lib/http.js' ) ,
1011 ...require ( './lib/objects.js' ) ,
1112 ...require ( './lib/pool.js' ) ,
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ class Future {
4+ #executor;
5+
6+ constructor ( executor ) {
7+ this . #executor = executor ;
8+ }
9+
10+ static of ( value ) {
11+ return new Future ( ( resolve ) => resolve ( value ) ) ;
12+ }
13+
14+ chain ( fn ) {
15+ return new Future ( ( resolve , reject ) =>
16+ this . fork (
17+ ( value ) => fn ( value ) . fork ( resolve , reject ) ,
18+ ( error ) => reject ( error ) ,
19+ ) ,
20+ ) ;
21+ }
22+
23+ map ( fn ) {
24+ return new Future ( ( resolve , reject ) =>
25+ this . fork (
26+ ( value ) =>
27+ new Future ( ( resolve , reject ) => {
28+ try {
29+ resolve ( fn ( value ) ) ;
30+ } catch ( error ) {
31+ reject ( error ) ;
32+ }
33+ } ) . fork ( resolve , reject ) ,
34+ ( error ) => reject ( error ) ,
35+ ) ,
36+ ) ;
37+ }
38+
39+ fork ( successed , failed ) {
40+ this . #executor( successed , failed ) ;
41+ }
42+
43+ promise ( ) {
44+ return new Promise ( ( resolve , reject ) => {
45+ this . fork (
46+ ( value ) => resolve ( value ) ,
47+ ( error ) => reject ( error ) ,
48+ ) ;
49+ } ) ;
50+ }
51+ }
52+
53+ const futurify =
54+ ( fn ) =>
55+ ( ...args ) =>
56+ new Future ( ( resolve , reject ) => {
57+ fn ( ...args , ( err , data ) => {
58+ if ( err ) reject ( err ) ;
59+ else resolve ( data ) ;
60+ } ) ;
61+ } ) ;
62+
63+ module . exports = { Future, futurify } ;
Original file line number Diff line number Diff line change @@ -9,6 +9,7 @@ module.exports = {
99 ...require ( './lib/error.js' ) ,
1010 ...require ( './lib/events.js' ) ,
1111 ...require ( './lib/fs.js' ) ,
12+ ...require ( './lib/future.js' ) ,
1213 ...require ( './lib/http.js' ) ,
1314 ...require ( './lib/network.js' ) ,
1415 ...require ( './lib/objects.js' ) ,
You can’t perform that action at this time.
0 commit comments