File tree Expand file tree Collapse file tree 1 file changed +60
-0
lines changed Expand file tree Collapse file tree 1 file changed +60
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * 仅实现异步链式调用的简化版
3+ */
4+
5+ function Promise ( excutor ) {
6+ var self = this
7+ self . status = "pending" // Promise当前的状态
8+ self . data = undefined // Promise的值
9+ self . onResolvedCallback = [ ] // Promise resolve时的回调函数集,因为在Promise结束之前有可能有多个回调添加到它上面
10+
11+ function resolve ( value ) {
12+ setTimeout ( ( ) => {
13+ if ( self . status === "pending" ) {
14+ self . status = "resolved"
15+ self . data = value
16+ self . onResolvedCallback . forEach ( callback => callback ( value ) )
17+ }
18+ } )
19+ }
20+
21+ excutor ( resolve . bind ( self ) )
22+ }
23+
24+ Promise . prototype . then = function ( onResolved ) {
25+ var self = this
26+
27+ return new Promise ( resolve => {
28+ self . onResolvedCallback . push ( function ( ) {
29+ var result = onResolved ( self . data )
30+ if ( result instanceof Promise ) {
31+ result . then ( resolve )
32+ } else {
33+ resolve ( result )
34+ }
35+ } )
36+ } )
37+ }
38+
39+ new Promise ( resolve => {
40+ setTimeout ( ( ) => {
41+ resolve ( 1 )
42+ } , 500 )
43+ } )
44+ . then ( res => {
45+ console . log ( res )
46+ return new Promise ( resolve => {
47+ setTimeout ( ( ) => {
48+ resolve ( 2 )
49+ } , 500 )
50+ } )
51+ } )
52+ . then ( res => {
53+ console . log ( res )
54+ return new Promise ( resolve => {
55+ setTimeout ( ( ) => {
56+ resolve ( 3 )
57+ } , 500 )
58+ } )
59+ } )
60+ . then ( console . log )
You can’t perform that action at this time.
0 commit comments