一、基本思路
    promise是一个构造函数,接受一个executor作为参数,executor会立即执行且接受两个参数函数,两个函数用来改变promise状态(只可改变一次)。promise实例有一个then方法,then方法接受两个参数函数,第一个参数函数接受一个value,在promise状态改变为fulfilled后执行;第二个参数函数接受一个reason,在promise状态变为rejected后调用。
    小细节:如果executor执行抛出了异常,promise状态会变成rejected,执行executor时要用try,catch捕获异常,必要时改变promise状态

    二、基本实现

    1. const PENDING = 'PENDING';
    2. const FULFILLED = 'FULFILLED';
    3. const REJECTED = 'REJECTED';
    4. class MyPromise{
    5. constructor(executor){
    6. this.status = PENDING;
    7. this.value = undefined; // value promise为fulfilled状态时的值
    8. this.reason = undefined; // reason promise边为rejected状态时的原因
    9. const resolve = (val)=>{
    10. // 细节 promise状态只能从pending变为fulfilled或者rejected,所以判断之前要判断
    11. if(this.status === PENDING){
    12. this.status = FULFILLED;
    13. this.value = val
    14. }
    15. };
    16. const reject = (val)=>{
    17. if(this.status === PENDING){
    18. this.status = REJECTED;
    19. this.reason = val
    20. }
    21. }
    22. try{
    23. executor(resolve,reject)
    24. }catch(e){
    25. reject(e)
    26. }
    27. }
    28. then(onFulfilled,onRejected){
    29. if(this.status === FULFILLED){
    30. onFulfilled(this.value)
    31. }else if (this.status === REJECTED){
    32. onRejected(this.reason)
    33. }
    34. }
    35. }