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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                > 1. 現在當一系列的callback在deferred中組成一個鏈的時候.每一個callback從上一個callback中獲取結果.這在生成器中很簡單–把你上一次運行生成器的的結果傳到下一次運行生成器就可以了(通過一個函數中的yield,形成具有先會順序的callback). > 2. deferred 中的callback 也可以返回deferred 對象,外部的deferred 會保持暫停直到內部的deferred 的觸發,然后外部deferred中的下一個callback(errback)會被調用,并被傳入內部deferred 返回的值. > 3. 所以想象生成器返回的不是一個普通的python 值,而是一個deferred 對象.當這發生時,外部的deferred 暫停,直到內部的deferred觸發.這里相當于生成器暫停,并且是是自動的,生成器在一個yield之后會一直暫停直到它被明確的重啟.所以我們可以延遲重啟生成器直到deferred 觸發,在這時我們可以返回正常的值(deferred 正常)或者拋出異常(deferred 失敗).這樣我們的生成器就成為一個真正的異步callback 序列了,這也是inlineCallbacks 函數要完成的功能.代碼在twisted.internet.defer中. > 4. inlineCallbacks 的主要的目的就是把一個生成器變成一系列的異步的callbacks. > 5. 當我們調用一個用inlineCallbacks 修飾的函數的時候,我們不需要調用下一個或者發送或者拋出我們自己.這個裝飾器會幫我們完成這些并會確保我們的生成器會一直運行到底(假設它并沒有拋出異常). > 6. 假如我們在生成器中生成一個不是deferred 的值,生成器會立即重啟并帶著這個yield 生成的值. result = yield 1 > 7. 如果我們在生成器中生成一個deferred,它會在這個deferred觸發之后才會重啟.如果這個deferred 成功了,yield 的結果就是deferred 的結果.如果這個deferred 失敗了,yield 會拋出這個異常.注意這里的異常是一個普通的Exception 而不是Failure,我們可以用try/except 來捕捉它. > 8. 被inlineCallbacks修飾的函數最終會返回一個deferred,.因為我們不知道生成器什么時候會停止運行,這個被修飾過的函數是一個異步的函數,最適合返回的是deferred.注意這個返回的deferred 不是yield 語句返回的deferred,它是這個生成器全部運行完畢之后才觸發的deferred. ~~~ __author__ = 'dailin' from twisted.internet.defer import inlineCallbacks, Deferred @inlineCallbacks def my_callbacks(): from twisted.internet import reactor print('first callback') result = yield 1 # yielded values that aren't deferred come right back print('second callback got', result) d = Deferred() reactor.callLater(5, d.callback, 2) result = yield d # yielded deferreds will pause the generator print('third callback got', result) # the result of the deferred d = Deferred() reactor.callLater(5, d.errback, Exception(3)) try: yield d except Exception as e: result = e print('fourth callback got', repr(result)) # the exception from the deferred reactor.stop() from twisted.internet import reactor reactor.callWhenRunning(my_callbacks) reactor.run() ~~~ 結果 ~~~ first callback second callback got 1 third callback got 2 fourth callback got Exception(3,) ~~~
                  <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>

                              哎呀哎呀视频在线观看