// 封装一个简单的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)
})