易理解的Promise封裝

火腿腸燒烤大賽冠軍發表於2020-12-03
//promise英文中叫做承諾
//成功resolve  失敗reject 正在過程中 pending 沒人接的時候


var obj = {
    status: '',
    value: ''
}
function Apromise(fn) {
    obj.status = 'pending'
    obj.value = ''
    function resolve(value) {
        if (obj.status === 'pending') {
            obj.status = 'resolve'
            obj.value = value
        }
    }
    function reject(value) {
        if (obj.status === 'pending') {
            obj.status = 'reject'
            obj.value = value
            console.log(456456);
        }
    }
    console.log(123123);
    fn(resolve, reject)
}
Apromise.prototype.then = function (resolve, reject) {
    if (obj.status === 'resolve') {
        resolve(obj.value)
    }
    if (obj.status === 'reject') {
        reject(obj.value)
    }
}
let p = new Apromise((resolve, reject) => {
    //resolve('1')
    reject('2')
}).then(res => {
    console.log(res)
}, err => {
    console.log(err)
})

例項化promise:相當於如果有成功的條件就把function Apromise中的成功函式放到最下面進行執行
.then:相當於把then中的函式放入Apromise.prototype.then中進行根據之前設定的狀態執行輸出(obj.value)

總結 沒看原始碼現在感覺就是形參實參的來回撥用 沒啥的

相關文章