Promise 很火,没看源码,仅参考平时的使用,造了一个小轮子(有时间再去看源码把)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
   | class PromiseT {   constructor() {     this.status = 'running';     this.val = null;     this.pendingList = [];   }   then(...list) {     this.pendingList.push(...list);     return this.run();   }   resolve(val) {     this.status = 'running';     if (val !== undefined) {       this.val = val;     }     return this.run();   }   pending() {     this.status = 'pending';   }   run() {     if (this.status === 'pending') {       return this;     }     const cal = this.pendingList.shift();     if (cal === undefined) {       return this;     }     const result = cal(this.val, this);     if (result === undefined) {       return this.run();     }     if (result.constructor === PromiseT) {       return result.then(...this.pendingList);     }     this.val = result;     return this.run();   } }
 
  | 
 
测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   | new PromiseT()   .resolve(5)   .then(x => x + 1)   .then(x => new PromiseT().resolve(2).then(a => x / a))   .then(x => console.log(x))   .then((x, p) => {     p.pending();     setTimeout(() => {       p.resolve(x - 3);     }, 2000);   })   .then(x => console.log(x));
 
 
 
 
 
  | 
 
毕竟是小轮子,catch() finally() 这些没写。。。