Promise 是一個對象第岖,保存著未來將要結(jié)束的事件难菌,她有兩個特征:
1、對象的狀態(tài)不受外部影響蔑滓,Promise 對象代表一個異步操作郊酒,有三種狀態(tài),pending 進行中键袱,fulfilled 已成功燎窘,rejected 已失敗,只有異步操作的結(jié)果蹄咖,才可以決定當前是哪一種狀態(tài)褐健,任何其他操作都無法改變這個狀態(tài),這也就是 promise 名字的由來
2澜汤、一旦狀態(tài)改變蚜迅,就不會再變,promise 對象狀態(tài)改變只有兩種可能俊抵,從 pending 改到 fulfilled 或者從 pending 改到 rejected谁不,只要這兩種情況發(fā)生,狀態(tài)就凝固了徽诲,不會再改變刹帕,這個時候就稱為定型 resolved,
Promise 的基本用法,
let promise1 = new Promise(function(resolve,reject){
setTimeout(function(){
resolve('ok')
},1000)
})
promise1.then(function success(val){
console.log(val)
})
最簡單代碼實現(xiàn)
promise class PromiseM {
constructor (process) {
this.status = 'pending' this.msg = '' process(this.resolve.bind(this),
this.reject.bind(this)) return this
}
resolve (val) {
this.status = 'fulfilled' this.msg = val
}
reject (err) {
this.status = 'rejected'
this.msg = err
}
then (fufilled, reject) {
if(this.status === 'fulfilled') {
fufilled(this.msg)
}
if(this.status === 'rejected') {
reject(this.msg)
}
}
}
//測試代碼
var mm=new PromiseM(function(resolve,reject){
resolve('123');
});
mm.then(function(success){
console.log(success);
},
function(){
console.log('fail!');
});