异步Java:帮助展平嵌套Mono

异步Java:帮助展平嵌套Mono,java,asynchronous,spring-webflux,project-reactor,Java,Asynchronous,Spring Webflux,Project Reactor,设置: public Mono getAsyncResult(){//应返回Mono 从供应商处退回单品(()->{ if(stopEarly())返回Mono.just(“STOPPED EARLY”); int a=doSyncJob1(); int b=doSyncJob2(); 返回doAsyncJob(a,b).map(string1->toString2(string1)); }); } 现在,整个程序返回Mono。如何让它在不阻塞的情况下返回Mono 之所以都在Mono.from

设置:

public Mono getAsyncResult(){//应返回Mono
从供应商处退回单品(()->{
if(stopEarly())返回Mono.just(“STOPPED EARLY”);
int a=doSyncJob1();
int b=doSyncJob2();
返回doAsyncJob(a,b).map(string1->toString2(string1));
});
}
现在,整个程序返回
Mono
。如何让它在不阻塞的情况下返回
Mono


之所以都在
Mono.fromSupplier()
中,是因为我不需要任务必须立即阻塞和发生,它们可以安排为异步运行。也许有一种方法是把里面的东西展平,但我不知道如何组合。用
Mono.fromSupplier()替换
Mono.fromSupplier


另外,如果
doSyncJob*
阻塞,则它们将阻塞订阅服务器线程。因此,您可能希望在
之后使用
.subscribeOn(Schedulers.elastic())
。defer(…)
以确保阻塞工作在用于阻塞工作的
调度器中执行。

您是否尝试过
Mono.fromSupplier(…).flatMap(Function.identity())
?这里是指向文档的链接,以供参考
public Mono<Mono<String>> getAsyncResult() { // should return Mono<String>
    return Mono.fromSupplier(() -> {
        if (stopEarly()) return Mono.just("STOPPED EARLY");

        int a = doSyncJob1();
        int b = doSyncJob2();
        return doAsyncJob(a, b).map(string1 -> toString2(string1));
    });
}