class  MyPromise  { constructor ( executor )  { this . state =  "pending" ; this . value =  undefined ; this . reason =  undefined ; this . onResolvedCallbacks =  [ ] ; this . onRejectedCallbacks =  [ ] ; const  resolve  =  ( value )  =>  { if  ( this . state ===  "pending" )  { this . state =  "fulfilled" ; this . value =  value; this . onResolvedCallbacks. forEach ( ( fn )  =>  fn ( ) ) ; } } ; const  reject  =  ( reason )  =>  { if  ( this . state ===  "pending" )  { this . state =  "rejected" ; this . reason =  reason; this . onRejectedCallbacks. forEach ( ( fn )  =>  fn ( ) ) ; } } ; try  { executor ( resolve,  reject) ; }  catch  ( err)  { reject ( err) ; } } then ( onFulfilled,  onRejected )  { onFulfilled = typeof  onFulfilled ===  "function"  ?  onFulfilled  :  ( value )  =>  value; onRejected = typeof  onRejected ===  "function" ?  onRejected :  ( reason )  =>  { throw  reason; } ; const  promise2 =  new  MyPromise ( ( resolve,  reject )  =>  { if  ( this . state ===  "fulfilled" )  { setTimeout ( ( )  =>  { try  { const  x =  onFulfilled ( this . value) ; this . resolvePromise ( promise2,  x,  resolve,  reject) ; }  catch  ( err)  { reject ( err) ; } } ,  0 ) ; } if  ( this . state ===  "rejected" )  { setTimeout ( ( )  =>  { try  { const  x =  onRejected ( this . reason) ; this . resolvePromise ( promise2,  x,  resolve,  reject) ; }  catch  ( err)  { reject ( err) ; } } ,  0 ) ; } if  ( this . state ===  "pending" )  { this . onResolvedCallbacks. push ( ( )  =>  { setTimeout ( ( )  =>  { try  { const  x =  onFulfilled ( this . value) ; this . resolvePromise ( promise2,  x,  resolve,  reject) ; }  catch  ( err)  { reject ( err) ; } } ,  0 ) ; } ) ; this . onRejectedCallbacks. push ( ( )  =>  { setTimeout ( ( )  =>  { try  { const  x =  onRejected ( this . reason) ; this . resolvePromise ( promise2,  x,  resolve,  reject) ; }  catch  ( err)  { reject ( err) ; } } ,  0 ) ; } ) ; } } ) ; return  promise2; } resolvePromise ( promise2,  x,  resolve,  reject )  { if  ( promise2 ===  x)  { return  reject ( new  TypeError ( "Chaining cycle detected for promise" ) ) ; } let  called =  false ; if  ( x instanceof  MyPromise )  { x. then ( ( value )  =>  { if  ( called)  return ; called =  true ; this . resolvePromise ( promise2,  value,  resolve,  reject) ; } , ( reason )  =>  { if  ( called)  return ; called =  true ; reject ( reason) ; } ) ; }  else  { resolve ( x) ; } } static  resolve ( value )  { return  new  MyPromise ( ( resolve,  reject )  =>  { resolve ( value) ; } ) ; } static  reject ( reason )  { return  new  MyPromise ( ( resolve,  reject )  =>  { reject ( reason) ; } ) ; } static  all ( promises )  { return  new  MyPromise ( ( resolve,  reject )  =>  { const  result =  [ ] ; let  count =  0 ; const  processResult  =  ( index,  value )  =>  { result[ index]  =  value; count++ ; if  ( count ===  promises. length)  { resolve ( result) ; } } ; promises. forEach ( ( promise,  index )  =>  { if  ( promise instanceof  MyPromise )  { promise. then ( ( value )  =>  processResult ( index,  value) , ( reason )  =>  reject ( reason) ) ; }  else  { processResult ( index,  promise) ; } } ) ; } ) ; } static  race ( promises )  { return  new  MyPromise ( ( resolve,  reject )  =>  { promises. forEach ( ( promise )  =>  { if  ( promise instanceof  MyPromise )  { promise. then ( resolve,  reject) ; }  else  { resolve ( promise) ; } } ) ; } ) ; } 
} 
const  promise =  new  MyPromise ( ( resolve,  reject )  =>  { setTimeout ( ( )  =>  { resolve ( '成功' ) ; } ,  1000 ) ; 
} ) ; 
promise. then ( value  =>  { console. log ( '成功的结果:' ,  value) ; } , reason  =>  { console. log ( '失败的原因:' ,  reason) ; } 
) ;