亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

原生JS實(shí)現(xiàn)簡單的Promise

Steven / 679人閱讀

摘要:下邊就手寫一個簡單版本的。首先要了解的基本用法,是一個原生支持的構(gòu)造函數(shù),需要傳入一個自定義函數(shù),接受兩個參數(shù)和,接受成功數(shù)據(jù)回調(diào),用于處理異常?;居梅橐韵聻榈脑唵螌?shí)現(xiàn),滿足了的簡單調(diào)用使用方法同的使用方法一樣

javascript es6標(biāo)準(zhǔn)中的 Promise對象在js編程中使用量很大,使用Promise可以讓異步邏輯在開發(fā)中清晰很多,了解其原理則有益在開發(fā)過程中更清晰的使用Promise對象,或者能在沒有Promise原生支持的es5標(biāo)準(zhǔn)下簡單的造一個Promise對象出來。下邊就手寫一個簡單版本的Promise。
首先要了解Promise的基本用法,Promise是一個原生支持的構(gòu)造函數(shù),需要傳入一個自定義函數(shù),接受兩個參數(shù) resolve和reject,resolve接受成功數(shù)據(jù)回調(diào),reject用于處理異常?;居梅椋?
var exp1 = new Promise(function(resolve,reject){
    try{
        setTimeout(function(){
            xxx
            resolve(xx)
        },3000)
    }catch(e){
        reject(e)
    }
})

exp1.then(function(data){
    xxx
})

以下為es5的原生簡單實(shí)現(xiàn),滿足了then的簡單調(diào)用

function PromiseX(fun){
    var _this = this;
    this.status = "pendding";
    this.data = null;
    this.error = null;
    var resolve = function(data){
        _this.changeStatus("success");
        _this.thenCb&&_this.thenCb(data);
        _this.data = data;
    }
    var reject = function(e){
        _this.changeStatus("error");
        _this.thenErrCb&&_this.thenErrCb(e);
        _this.error = e;
    }
    fun&&fun(resolve,reject)
}
PromiseX.prototype.then = function(cb,errCb){
    if(this.data){
        cb&&cb(this.data);
    }
    if(this.error){
        errCb&&errCb(this.error);
    }
    this.thenCb = cb;
    this.thenErrCb = errCb;
    return this;
}
PromiseX.prototype.changeStatus = function(status){
    this.status = status;
}

使用方法同es6的使用方法一樣

var testPromiseX = new PromiseX(function(resolve){
    setTimeout(function(){
        resolve(1)
    },3000)
})
testPromiseX.then(function(res){
    alert(res)
})

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/103844.html

相關(guān)文章

  • [譯] 深入理解 Promise 五部曲:4. 擴(kuò)展問題

    摘要:有一個和相關(guān)的更大的問題。最后,請負(fù)有責(zé)任感并且使用安全的擴(kuò)展。深入理解五部曲異步問題深入理解五部曲轉(zhuǎn)換問題深入理解五部曲可靠性問題深入理解五部曲擴(kuò)展性問題深入理解五部曲樂高問題最后,安利下我的個人博客,歡迎訪問 原文地址:http://blog.getify.com/promis... 現(xiàn)在,我希望你已經(jīng)看過深入理解Promise的前三篇文章了。并且假設(shè)你已經(jīng)完全理解Promises...

    Shimmer 評論0 收藏0
  • 原生js寫一個"多動癥"簡歷

    摘要:用原生寫一個多動癥的簡歷預(yù)覽地址源碼地址最近在知乎上看到方應(yīng)杭用寫了一個會動的簡歷,覺得挺好玩的,研究一下其實(shí)現(xiàn)思路,決定試試用原生來實(shí)現(xiàn)。 用原生js寫一個多動癥的簡歷 預(yù)覽地址源碼地址 最近在知乎上看到@方應(yīng)杭用vue寫了一個會動的簡歷,覺得挺好玩的,研究一下其實(shí)現(xiàn)思路,決定試試用原生js來實(shí)現(xiàn)。 showImg(https://segmentfault.com/img/remot...

    Y3G 評論0 收藏0
  • 傳統(tǒng) Ajax 已死,F(xiàn)etch 永生

    摘要:結(jié)果證明,對于以上瀏覽器,在生產(chǎn)環(huán)境使用是可行的。后面可以跟對象,表示等待才會繼續(xù)向下執(zhí)行,如果被或拋出異常則會被外面的捕獲。,,都是現(xiàn)在和未來解決異步的標(biāo)準(zhǔn)做法,可以完美搭配使用。這也是使用標(biāo)準(zhǔn)一大好處。只允許外部傳入成功或失敗后的回調(diào)。 showImg(https://cloud.githubusercontent.com/assets/948896/10188666/bc9a53...

    fai1017 評論0 收藏0
  • es6 promise面試

    摘要:執(zhí)行函數(shù)會返回一個遍歷器對象,每一次函數(shù)里面的都相當(dāng)一次遍歷器對象的方法,并且可以通過方法傳入自定義的來改變函數(shù)的行為。函數(shù)可以通過配合函數(shù)更輕松更優(yōu)雅的實(shí)現(xiàn)異步編程和控制流管理。它和構(gòu)造函數(shù)的不同點(diǎn)類的內(nèi)部定義的所有方法,都是不可枚舉的。 let const的命令 在ES6之前,聲明變量只能用var,var方式聲明變量其實(shí)是很不合理的,準(zhǔn)確的說,是因?yàn)镋S5里面沒有塊級作用域是很不合...

    timger 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<