使用flatmap的spring reactor webclient顺序请求和takewhile

时间:2018-02-08 23:23:58

标签: java spring project-reactor spring-webflux flatmap

我想从第三方资源中检索所有网页。为此,我写了这个:

final WebClient webClient = WebClient.builder()
     .baseUrl("http://resource.com")
     .build();
Flux.fromStream(IntStream.iterate(0, i -> i + 1).boxed())
     .flatMap(i -> webClient.get()
          .uri("/data?page={page}", i)
          .retrieve()
          .bodyToMono(Page.class))
     .takeWhile(Page::isMoreAvailable)
     .flatMapIterable(Page::getData)

但它没有正常工作。多次调用flatMap,在takeWhile检索第一个响应之前,它会使用不同的页面执行多个请求。

如果我将其更改为:

.map(i -> webClient.get()
        .uri("/data?page={page}", i)
        .retrieve()
        .bodyToMono(Page.class)
        .block())

效果很好。

那么,我怎样才能用flatMap来实现这个目标?

1 个答案:

答案 0 :(得分:0)

好的,所以flatmap处理并发

var keys = Object.keys($scope.details);

for(var i = 0; i < keys.length; i++){
   console.log(keys[i]);
}

做了这个伎俩。