當前位置:編程學習大全網 - 源碼下載 - Vertx - Future.compose

Vertx - Future.compose

1 .vertx中的Future與java原生中不同,二者都有封裝結果的功能,但是vertx中為了避免await阻塞event loop線程,導致不能及時響應的問題.通過在Future中定義回調Handler來解決這個問題.

demo1:

demo1解釋:

1.定義壹個結果類型為String的Future.

2.為這個Future設置回調.

3.調用異步方法,將這個Future作為參數傳入

4.complete()將調用結果封裝進Future,並將Future的狀態置為completed.返回.

5.最後回調函數執行,處理調用結果.

需要理清的是,

Future<T> 中的T代表的是返回的結果類型.

Handler<AsyncResult<T>> 是對調用結果的處理函數.

2 .理解compose,compose是為了應對回調地獄采用的鏈式寫法.

compose的第壹種寫法:

傳入參數為

1.調用此compose方法的future的handler,

2.下壹個future

處理思路:

1.執行compose調用future的回調處理

2.如果當前future的回調處理中出錯,那麽將下壹個future置為失敗,

3.未出錯則直接將下壹個future返回.

demo2:

demo2解釋:

1.定義2個future

2.第4行模擬第1個異步調用完畢,f1得到結果,狀態completed.

3.f1發起compose,參數1為f1的handler,參數2為下壹個future f2

4.註意,在f1的handler中,模擬第2個異步調用完畢,f2狀態轉為completed,從而觸發f2的handler.

compose的第2種寫法

處理思路:

1.傳入參數類型Function<T, Future<U>>,說明傳入的是壹個轉換函數,此函數將future中的調用結果T轉換為鏈中的下壹個future.

2.如果調用是成功的,那麽將調用結果作為參數傳入這個function執行,就是這句"apply = mapper.apply(ar.result());",返回結果為Future<U>.

3.由於事先需要對調用結果ar是否成功判斷,所以外面再套了個Future<U> ret.

4.將ret返回.

這個封裝蠻有意思,在compose方法中設置調用者future的handler,在handler中將future中的結果ar傳遞給compose參數(function),然後執行function,最後將function返回的future用compose內部生成的future封裝下返回.

demo3:

雖然api封裝復雜了些,但是使用過程比第1種寫法更加簡單了.也容易理解.

  • 上一篇:USDT歸集問題
  • 下一篇:征服的單詞征服的單詞是什麽
  • copyright 2024編程學習大全網