node_ 封装简单的promise方法

// 封装一个简单的proimse方法
class customPromise {
  constructor (callback) {
    //成功结果
    this.successResult = ''
    //失败结果
    this.failResult = ''
    // 当前状态
    this.status = 'pending'
    //当状态没有改变时,将then方法的回调函数保存起来
    this.query = {}
    callback(param => {
      this.successResult = param
      //改变状态为成功
      this.status = 'fulfilled'
      //状态改变成功,执行保存then方法保存的回调函数
      console.log('this.query',this.query)
      this.query.resolve(param)
    },param => {
      this.failResult = param
      //改变状态为失败
      this.status = 'rejected'
      this.query.reject(param)
    })
  }
  //调用then方法,状态并未改变,将then方法执行的回调保存起来,等到异步代码执行
  //完成后,在统一执行then方法的回调函数
  then (onresolve, onreject) {
    if(this.status === 'fulfilled') success(this.successResult)
    else if (this.status === 'rejected') onreject(this.failResult)
    else Object.assign(this.query,{resolve: onresolve, reject: onreject})
  }
}
let myProimse = new customPromise((resolve, reject) => {
  $.ajax({
    url: 'http://.....',
    type: 'get',
    data: {'data': 'data'},
    dataType: 'json',
    success: (data)=>{resolve(data)},
    error: (xhr, status, err)=>{reject(err)}
  })
})
.then(data => {
  console.log('data:',data)
},err => {
  console.log("err",err)
})

猜你喜欢

转载自www.cnblogs.com/JunLan/p/12437428.html