File tree 1 file changed +49
-16
lines changed
1 file changed +49
-16
lines changed Original file line number Diff line number Diff line change 1
1
'use strict' ;
2
2
3
- const getConferences = ( ) => {
4
- let onDone = null ;
5
- const deferred = {
6
- onData : callback => onDone = callback
7
- } ;
8
- setTimeout ( ( ) => {
9
- if ( onDone ) onDone ( [ 'Tehran' , 'Yalta' , 'Potsdam' ] ) ;
10
- } , 5000 ) ;
11
- return deferred ;
12
- } ;
3
+ class Deferred {
4
+ constructor ( ) {
5
+ this . value = undefined ;
6
+ this . error = null ;
7
+ this . finished = false ;
8
+ this . events = { } ;
9
+ }
10
+
11
+ resolve ( value ) {
12
+ if ( this . finished ) return ;
13
+ this . value = value ;
14
+ this . finished = true ;
15
+ const event = this . events [ 'done' ] ;
16
+ if ( event ) event . forEach ( fn => fn ( value ) ) ;
17
+ }
18
+
19
+ reject ( err ) {
20
+ if ( this . finished ) return ;
21
+ this . error = err ;
22
+ this . finished = true ;
23
+ const event = this . events [ 'fail' ] ;
24
+ if ( event ) event . forEach ( fn => fn ( err ) ) ;
25
+ }
26
+
27
+ done ( fn ) {
28
+ if ( this . finished ) return ;
29
+ const event = this . events [ 'done' ] ;
30
+ if ( event ) event . push ( fn ) ;
31
+ else this . events [ 'done' ] = [ fn ] ;
32
+ return this ;
33
+ }
34
+
35
+ fail ( fn ) {
36
+ if ( this . finished ) return ;
37
+ const event = this . events [ 'fail' ] ;
38
+ if ( event ) event . push ( fn ) ;
39
+ else this . events [ 'fail' ] = [ fn ] ;
40
+ return this ;
41
+ }
42
+ }
13
43
14
44
// Usage
15
45
16
- const conferences = getConferences ( ) ;
46
+ const conferences = new Deferred ( )
47
+ . done ( list => {
48
+ console . log ( list ) ;
49
+ } )
50
+ . fail ( err => {
51
+ throw err ;
52
+ } ) ;
17
53
18
54
console . log ( conferences ) ;
19
55
20
- conferences . onData ( list => {
21
- console . log ( list ) ;
22
- } ) ;
23
-
24
- console . log ( 'end' ) ;
56
+ conferences . resolve ( [ 'Tehran' , 'Yalta' , 'Potsdam' ] ) ;
57
+ conferences . reject ( new Error ( 'Never occurs' ) ) ;
You can’t perform that action at this time.
0 commit comments