国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

手寫實現promise

skinner / 1475人閱讀

摘要:簡易版本的第一步列出三大塊第二步負責注冊所有的函數負責執行所有的函數第三步在里面要加上防止還沒進行注冊就直接執行了第四步里面要返回這樣就可以鏈式調用了第五步三個狀態的管理的鏈式調用在里面一個這樣才能里面加上異步函數加上了加入狀態為了解決在異

// 簡易版本的promise

    // 第一步: 列出三大塊  this.then   resolve/reject   fn(resolve,reject)
    // 第二步: this.then負責注冊所有的函數   resolve/reject負責執行所有的函數 
    // 第三步: 在resolve/reject里面要加上setTimeout  防止還沒進行then注冊 就直接執行resolve了
    // 第四步: resolve/reject里面要返回this  這樣就可以鏈式調用了
    // 第五步: 三個狀態的管理 pending fulfilled rejected
 
    // *****promise的鏈式調用 在then里面return一個promise 這樣才能then里面加上異步函數
    // 加上了catch
    function PromiseM(fn) {
        var value = null;
        var callbacks = [];
        //加入狀態 為了解決在Promise異步操作成功之后調用的then注冊的回調不會執行的問題
        var state = "pending";
        var _this = this;

        //注冊所有的回調函數
        this.then = function (fulfilled, rejected) {
            //如果想鏈式promise 那就要在這邊return一個new Promise
            return new PromiseM(function (resolv, rejec) {
                //異常處理
                try {
                    if (state == "pending") {
                        callbacks.push(fulfilled);
                        //實現鏈式調用
                        return;
                    }
                    if (state == "fulfilled") {
                        var data = fulfilled(value);
                        //為了能讓兩個promise連接起來
                        resolv(data);
                        return;
                    }
                    if (state == "rejected") {
                        var data = rejected(value);
                        //為了能讓兩個promise連接起來
                        resolv(data);
                        return;
                    }
                } catch (e) {
                    _this.catch(e);
                }
            });
        }

        //執行所有的回調函數
        function resolve(valueNew) {
            value = valueNew;
            state = "fulfilled";
            execute();
        }

        //執行所有的回調函數
        function reject(valueNew) {
            value = valueNew;
            state = "rejected";
            execute();
        }

        function execute() {
            //加入延時機制 防止promise里面有同步函數 導致resolve先執行 then還沒注冊上函數
            setTimeout(function () {
                callbacks.forEach(function (cb) {
                    value = cb(value);
                });
            }, 0);
        }

        this.catch = function (e) {
            console.log(JSON.stringify(e));
        }

        //經典 實現異步回調
        fn(resolve, reject);
    }

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106706.html

相關文章

  • 手寫一款符合Promise/A+規范的Promise

    摘要:手寫一款符合規范的長篇預警有點長,可以選擇性觀看。初始狀態是,狀態可以有或者不能從轉換為或者從轉換成即只要由狀態轉換為其他狀態后,狀態就不可變更。 手寫一款符合Promise/A+規范的Promise 長篇預警!有點長,可以選擇性觀看。如果對Promise源碼不是很清楚,還是推薦從頭看,相信你認真從頭看到尾,并且去實際操作了,肯定會有收獲的。主要是代碼部分有點多,不過好多都是重復的,不...

    rubyshen 評論0 收藏0
  • 【js】what is Promise手寫實現簡易版Promise

    摘要:有三種狀態,等待中,已完成,已失敗。對象狀態不受外界影響,只有異步操作的結果可以改變狀態,這就是的由來怎么用接受一個函數作為參數,這個參數函數的兩個參數分別是和,用來執行了兩種狀態的回調函數。當實例生成后,用方法來指定兩種狀態的回調函數。 什么是Promise 官方的解釋:Promise是一個用來傳遞異步操作消息的對象。Promise有三種狀態,pending(等待中),resolve...

    LMou 評論0 收藏0
  • 手寫實現promise

    摘要:簡易版本的第一步列出三大塊第二步負責注冊所有的函數負責執行所有的函數第三步在里面要加上防止還沒進行注冊就直接執行了第四步里面要返回這樣就可以鏈式調用了第五步三個狀態的管理的鏈式調用在里面一個這樣才能里面加上異步函數加上了加入狀態為了解決在異 // 簡易版本的promise // 第一步: 列出三大塊 this.then resolve/reject fn(resolv...

    _ang 評論0 收藏0
  • promise/A+規范翻譯以及手寫實現

    摘要:如果實現滿足所有要求,則實現可能允許。本條款允許使用特定于實現的方法來采用已知一致承諾的狀態。接下來根據規范進行手寫實現注釋偷懶就將對應的規范標注出來,其實基本上就是對著規范實現。 如果要手寫實現promise,那么先看看promise/A+規范,再來實現,將會事半功倍。那么我先翻譯一下Promise/A+規范中的內容。 術語 1.1 promise 是一個帶有符合此規范的the...

    LiuZh 評論0 收藏0
  • 「中高級前端面試」JavaScript手寫代碼無敵秘籍

    摘要:第一種直接調用避免在不必要的情況下使用,是一個危險的函數,他執行的代碼擁有著執行者的權利。來自于此外,實現需要考慮實例化后對原型鏈的影響。函數柯里化的主要作用和特點就是參數復用提前返回和延遲執行。手寫路徑導航 實現一個new操作符 實現一個JSON.stringify 實現一個JSON.parse 實現一個call或 apply 實現一個Function.bind 實現一個繼承 實現一個J...

    Zhuxy 評論0 收藏0

發表評論

0條評論

skinner

|高級講師

TA的文章

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