<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Async函數/Await(以前說是ES7 stage-3) Generator的弊病是沒有執行器,它本身就不是為流程控制而生的,所以co的出現只是解決了這個問題。 可是,你不覺得奇怪么?為什么非要加個co,才能好好的玩耍?為什么不能是直接就可以執行,并且效果和Yieldable一樣的呢? Async/Await 就是這樣被搞出來的,很多人認為它是異步操作的終極解決方案。 **Await** Await的3種可能情況 * Await + Async函數 * Await + Promise * await + co(co會返回Promise,這樣可以Yieldable,但難度較大,適合老手) 頭2種是比較常用的,第三種co作為promise生成器,是一種hack的辦法。 下面給出第一種和第二種的示例: ~~~ async function a2() { return new Promise((resolve, reject) => { setTimeout(resolve, 1000); }) } async function a1() { console.log("hello a1 and start a2"); await a2(); console.log("hello end a2"); } async function a0() { console.log("hello a0 and start a1"); await a1(); console.log("hello end a1"); } a0() ~~~ **執行** 需要使用babel或者其他支持async函數的編譯工具,這里使用runkoa(是為koa支持async函數做的基于babel的簡單封裝) ~~~ $ runkoa async.js async.js 3babel presets path = /Users/sang/.nvm/versions/node/v4.4.5/lib/node_modules/runkoa/node_modules/ hello a0 and start a1 hello a1 and start a2 hello end a2 hello end a1 ~~~ **異常處理** Node.js里關于異常處理有一個約定,即同步代碼采用try/catch,非同步代碼采用error-first方式。對于Async函數倆說,它的Await語句是同步執行的,所以最正常的流程處理是采用try/catch語句捕獲,和generator/yield是一樣的。 下面的代碼所展示的是通用性的做法: ~~~ try { console.log(await asyncFn()); } catch (err) { console.error(err); } ~~~ 很多時候,我們需要把異常做得粒度更細致一些,這時只要把Promise的異常處理好就好了。 Promise里有2種處理異常的方法 * then(onFulfilled, onRejected)里的onRejected,處理當前Promise里的異常 * catch處理全局異常 **Async函數總結** * Async函數語義上非常好 * Async不需要執行器,它本身具備執行能力,不像Generator * Async函數的異常處理采用try/catch和Promise的錯誤處理,非常強大 * Await接Promise,Promise自身就足夠應對所有流程了 * Await釋放Promise的組合能力,外加Promise的then,基本無敵
                  <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>

                              哎呀哎呀视频在线观看