我想从第三方资源检索所有页面。为此,我写了这个:
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(i -> webClient.get()
.uri("/data?page={page}", i)
.retrieve()
.bodyToMono(Page.class), 1)
成功了。
问题内容: 假设我有以下代码: 输出是相同的线程名称,因此这里没有任何好处-我的意思是,只有一个线程可以完成所有工作。 里面是这段代码: 我知道如果“外部”流是并行的(可能会阻塞),则强制该属性,“外部”将不得不等待“ flatMap”完成,反之亦然(因为使用了相同的公共池),但是为什么 总是 强迫那个? 那是在以后的版本中 可能会 更改的事情之一吗? 问题答案: 有两个不同方面。 首先,只有一个
本文向大家介绍Swift 进阶 —— map 和 flatMap的使用,包括了Swift 进阶 —— map 和 flatMap的使用的使用技巧和注意事项,需要的朋友参考一下 map 和 flatMap 主要分在集合上的使用和在可选类型上的使用,下面分别来看下。 集合上使用 map 和 flatMap 先看如下的代码: 输入是一个一维数组,转换后 infos1 的结果是如下的一个二维数组,所以 m
为了让客户帐户更加安全,精心设计的密码是一个好的做法。这是我用于密码验证的正则表达式字符串。 代表: < li>8个或更多字符。 < li >大写字母A-Z < li >小写字母a-z <李>特殊字符~!@#$%^ 数字和/或字母顺序为3或以上是不合适的。 例子: 不OK = efg123!美元,ABC 567%,xyz789^ 谢谢你
问题内容: 我想以这种方式进行Ajax调用的堆栈:call(n-1)完成后,call(n)开始… 由于多种原因,我无法使用 async:false : 一些请求可能是 jsonp (最相关) 我还有其他一些可能同时起作用的ajax请求。 浏览器被阻止 我无法以这种方式链接我的请求: 因为请求的数量和参数是根据用户输入动态创建的。 一个小例子说明了我的问题。 您将看到服务器响应顺序是随机的,我要实现
takeWhile 镜像一个 Observable 直到某个元素的判定为 false takeWhile 操作符将镜像源 Observable 直到某个元素的判定为 false。此时,这个镜像的 Observable 将立即终止。 演示 let disposeBag = DisposeBag() Observable.of(1, 2, 3, 4, 3, 2, 1) .takeWhile
Creates a new sequence comprising the elements from the head of this sequence that satisfy some predicate. Once an element is encountered that doesn't satisfy the predicate, iteration will stop. Signa