如何突破项目反应堆的循环?

问题描述

我想像这样用反应堆写一些代码

String callRemote(String server){
  //remote call
...
}

List<String> servers = ...
String result = null;
for(String server: servers){ 
try{
     result = callRemote(server); // should be called in sequence
     if(result.equals("success")){
        break;
     }
    }catch(TimeoutException e){ //timeout control
        //
    }

}

一开始,我认为Flux.takeWhile一个不错的选择,但是很难控制每个callRemote的超时时间。 然后我尝试了Mono.zipwhenMono.then,但是我无法中断执行链。

解决方法

您可以使用filterWhen()

// return async first success
return Flux.just(servers).flatMap(this::connect)
        .filterWhen(result -> Mono.just(result.equalsIgnoreCase("success"));
        

检查filterWhen()的Javadoc