简单易懂-手撸promise原理

大家应该都或多或少了解Promise(), 这里我也不废话去解释,先了解一下实现步骤:

1.promIse是一个类,new Promsie()实例化对象时,传一个 executer 会立即调用。

2.Promise的默认状态是 pedding(等待态),调用 resolve 表示成功, reject 则表示失败。

3.每个Promise都有一个实例方法 then

4.我们可以从等待态转化为成功/失败态.

下面看代码:

//promise-applay.js
let Promise = require('./promise');
let p = new Promise(function(resolve,reject){
  console.log('start')
  resolve('情人节')
  reject('圣诞节')
})
p.then((value)=>{
  console.log('success',value)
},(reason)=>{
  console.log('error:',reason);
})
console.log('end')
// promise.js
function Promise(executer){
  //在promsie的内部中定义一个promise状态
  let _self = this
  _self.status = 'pending' //默认promise的状态是pending
  _self.value = null
  _self.reason = null
  function resolve(value){
    if(_self.status === 'pending'){
      _self.status = 'resolved'  //成功态
      _self.value = value
    }
  }

  function reject(reason){
    if(_self.status === 'pending'){
      _self.status = 'rejected' //失败态
      _self.reason  = reason
    }
  }
  executer(resolve,reject)
}

Promise.prototype.then = function (onFullfilled,onRejected){
  let _self = this
  if(_self.status === 'resolved'){
    onFullfilled(_self.value)
  }
  if(_self.status === 'rejected'){
    onRejected(_self.reason)
  }
}

module.exports = Promise

跟着上面步骤来理解,会发现其实也不是很难。这是面试常常会要求,也是必要技能!!!

猜你喜欢

转载自www.cnblogs.com/Arthur123/p/11750125.html