我無法將Mono<List> 處理為List但我似乎無法做到。我在某處讀到可以使用“平面地圖”,但我也無法做到。我不想在這種情況下使用“.block()”方法。
代碼示例可能是:
PagePublisher<Address> someAddressPage =
someService.getPagePublisherForAddress();
Mono<List<Address>> addressListMono =
Flux.from(someAddressPage.items()).collectList();
我需要List<Address>從Mono<List<Address>>. 方法回傳型別是List<Address>。
我不知道該怎么做,而且我對反應式比較陌生。在這方面需要幫助。
謝謝
uj5u.com熱心網友回復:
使用block()實際上Mono是在發出時從 a 中獲取物件的唯一方法。但是,您應該不惜一切代價避免它,因為它違背了使用反應式堆疊的目的,因為它實際上阻塞了等待從Mono.
這意味著在使用回應式編程時,您應該實際使用Mono,Flux以便您的應用程式真正是回應式的。這樣做的結果是您必須將方法的回傳型別更改為回傳Mono<List<Address>>。
uj5u.com熱心網友回復:
不可能List<Address從Mono<List<Address>>. 如果List不可用,Mono并且Flux本質上是異步/非阻塞的,則除非等待它進來,否則您無法獲得它,這就是阻塞。
理想情況下,您的方法應回傳Mono<List<Address>>或僅回傳,Flux<Address>并且此方法的呼叫者應訂閱結果。由于您使用的是 Spring Webflux,因此完整的鏈應該是反應式的。
您可以Mono從呼叫方法訂閱 ,并且您傳遞的訂閱者將List在它可用時獲得。例如
addressListMono.subscribe(
addressList -> doSomething(addressList),
error -> error.printStackTrace(),
() -> Console.out.println("completed without a value")
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/343374.html
標籤:爪哇 春天 弹簧靴 反应式编程 弹簧-webflux
