.subscribe(-) 与 .map(-).subscribe()

问题描述 投票:0回答:1

我正在阅读有关在 Mono 和 Flux 上使用转换运算符转换数据的项目反应器文档。但我可以帮忙问这个问题..

.map()
函数中执行逻辑然后调用 subscribe 与在
.subscribe()
函数中执行所有操作之间有什么区别?

在此答案中,订阅被描述为

最终消费者,通常由您的框架调用......而不是由用户代码调用。

但是 subscribe() 似乎在我遇到的教程和代码中经常使用。这是一个简单的例子。

// example using map
Mono.just("book1").map(book -> {
    bookService.rentOut(book);
    return book;
}).subscribe();


// example using subscribe
Mono.just("book2").subscribe(book -> {
    bookService.rentOut(book);
});

如果 bookService 返回错误问题仍然存在,请在

map()
中处理或使用
subscribe(consumer, errorConsumer)

java project-reactor
1个回答
0
投票

map()
运算符用于根据给定的
Function<T, R>
参数将生成的值从一种类型转换为另一种类型。

subscribe()
方法将“激活”可观察对象,并将在其
Consumer<T>
方法中接收生成的值。这也是此特定可观察量的反应式编程链中的最后一步,因为此方法不再返回
Mono<T>
实例,而是返回
Disposable
实例,该实例将用于终止订阅。

正如您所说,

Subscribe()
“在教程中使用得非常频繁”,因为需要“激活”可观察/订阅,否则什么都不会发生。之前的所有运算符都是用于“配置”,例如“当生成值 X 时,将其转换为 Y,限制生成的值,将它们构建在块中,根据某些条件过滤块,切换到不同的线程,等等......” 。您可以构建一个运算符链,产生的值在其中传递。然而,这只是“配置”,除非您订阅它,否则什么都不会发生。

© www.soinside.com 2019 - 2024. All rights reserved.