我对反应性编程很陌生。请协助实现以下的穆特尼。
我有DTO课程
public class UserAppSessionDto{
private UserDto user;
private List<OrgDto> userOrgs;
private List<AppDto> userApps;
}3种服务方法,一个返回Uni,另一个返回Multi。
Uni<UserDto> getUserByOrgUserId(Integer orgUserId);
Multi<AppDto> getUserApps(Integer orgUserId);
Multi<RoleDto> getUserRoles(Integer orgUserId);我需要编写一个调用上述3个方法的服务方法,应用一些业务验证,将返回值设置为UserAppSessionDto的一个实例,并返回一个Uni<UserAppSessionDto>。我已经提到了下面要应用的基本业务逻辑(null检查)。
public Uni<UserAppSessionDto> getUserAppSessionDetails(Integer orgUserId)
{
UserAppSessionDto user=new UserAppSessionDto();
//1. call the method Uni<UserDto> getUserByOrgUserId(Integer orgUserId)
//2. If UserDto (in the returned Uni) is not null, call Multi<AppDto> getUserApps(Integer orgUserId) and Multi<RoleDto> getUserRoles(Integer orgUserId) methods in parallel.
//3. Set the return values from the above three methods into user variable
//4. Return Uni<UserAppSessionDto>
return Uni.createFrom().item(user);
}发布于 2022-02-09 07:46:18
getUserApps和getUserRoles返回Multis的原因有什么?我不相信他们会流结果,相反,返回一个批的列表。如果是这样的话,使用Uni<List<X>更好。
通过这种更改,您的逻辑变得容易得多:
public Uni<UserAppSessionDto> getUserAppSessionDetails(Integer orgUserId) {
UserAppSessionDto user=new UserAppSessionDto();
Uni<UserDto> uni = getUserByOrgUserId(orgUserId)
.invoke(userDTO -> user.user = userDTO);
return uni
onItem().ifNotNull().transformToUni(userdto ->
Uni.combine().all()
.unis(getUserApps(orgUserId),getUserRoles(orgUserId))
.asTuple()
.invoke((apps, roles) -> user....)
)
.map(x -> user);
}https://stackoverflow.com/questions/70987223
复制相似问题