处理嵌套通量操作的智能方法
Smart way to handle nested flux operations
我有2种查询方法(findByName/findAnotherName)。
两者都 return Mono .
我通过比较这两种方法的结果来做一些逻辑,然后 return 其中之一在嵌套的 Flux 操作中。
它可能有一个聪明的方法来达到同样的结果。
以下是代码片段:
private Mono<List<Student>> find(String name) {
return repo.findByName(name)
.flatMap((List<Student> students) -> {
return repo.findAnotherName(anothName, 1).collectList()
.flatMap((List<Student> anotherStudents) -> {
//do some logic
return Mono.just(students);
});
});
}
提前致谢。
如果您的 //do some logic
是同步的,那么我可以建议类似
private Mono<List<Student>> find(String name) {
return repo.findByName(name)
.zipWhen((List<Student> students) -> {
return repo.findAnotherName(anothName, 1).collectList();
}, (students, anotherStudents) -> {
//some sync logic
return students;
});
}
但是如果逻辑也是异步的,那么
private Mono<List<Student>> find(String name) {
return repo.findByName(name)
.zipWhen((List<Student> students) -> {
return repo.findAnotherName(anothName, 1).collectList()
.flatMap(anotherStudents -> someAsyncMethod(anotherStudents));
}, ((students, o) -> students));
}
我有2种查询方法(findByName/findAnotherName)。
两者都 return Mono .
我通过比较这两种方法的结果来做一些逻辑,然后 return 其中之一在嵌套的 Flux 操作中。
它可能有一个聪明的方法来达到同样的结果。
以下是代码片段:
private Mono<List<Student>> find(String name) {
return repo.findByName(name)
.flatMap((List<Student> students) -> {
return repo.findAnotherName(anothName, 1).collectList()
.flatMap((List<Student> anotherStudents) -> {
//do some logic
return Mono.just(students);
});
});
}
提前致谢。
如果您的 //do some logic
是同步的,那么我可以建议类似
private Mono<List<Student>> find(String name) {
return repo.findByName(name)
.zipWhen((List<Student> students) -> {
return repo.findAnotherName(anothName, 1).collectList();
}, (students, anotherStudents) -> {
//some sync logic
return students;
});
}
但是如果逻辑也是异步的,那么
private Mono<List<Student>> find(String name) {
return repo.findByName(name)
.zipWhen((List<Student> students) -> {
return repo.findAnotherName(anothName, 1).collectList()
.flatMap(anotherStudents -> someAsyncMethod(anotherStudents));
}, ((students, o) -> students));
}