<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                >[success] # 異步職責鏈 ~~~ 1.上一個案例通過步返回一個特定的值"nextSuccessor",當有這個標記的時候認為他需要下一個職責節點, 但異步時候不一定什么時候執行完也導致不知道什么返回的到底是否是標記節點 2.解決方法通過自己手動去調用,當異步執行完畢后我們自己去調用下一個節點的方法,因此封裝了一個next 方法,在異步執行完后自調用下一個節點 ~~~ >[danger] ##### 代碼實現 ~~~ // 定義一個組合鏈子的類 var Chain = function (fn) { this.fn = fn this.successor = null } // 需要匹配的下一個節點 Chain.prototype.setNextSuccessor = function (successor) { return this.successor = successor } // 執行是否調用下一個節點 Chain.prototype.passRequest = function () { // 這里是異步 所以還沒有數據執行會跳過到下一個,因此異步要用自己的next var ret = this.fn.apply( this, arguments ); if ( ret === 'nextSuccessor' ){ return this.successor && this.successor.passRequest.apply( this.successor, arguments ); } return ret; } // 異步執行完畢來自己判斷是否走下一個節點, // 之前是通過是否返回標志符'nextSuccessor' 因為現在異步 // 就不能根據返回值來決定,只能是在異步時候來手動決定是否 // 調用下個節點 Chain.prototype.next= function(){ return this.successor && this.successor.passRequest.apply( this.successor, arguments ); }; ~~~ >[danger] ##### 使用 ~~~ var fn1 = new Chain(function(){ console.log( 1 ); return 'nextSuccessor'; }); var fn2 = new Chain(function(){ console.log( 2 ); var self = this; // 異步執行完畢來自己判斷是否走下一個節點 setTimeout(function(){ self.next(); }, 1000 ); }); var fn3 = new Chain(function(){ console.log( 3 ); }); fn1.setNextSuccessor( fn2 ).setNextSuccessor( fn3 ); fn1.passRequest(); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看