控制特定用例的反应器执行(或在特定点获得响应)
Controlling the reactor execution for certain use cases (or get response at certain point)
我正在尝试更新 MongoDB 中的文档,但无法检查更新状态并回复用户。下面是我的代码:
@Autowired
ReactiveMongoTemplate mongoTemplate;
public Mono<String> updateUser(UserIn userIn) {
UserResponse resp = new UserResponse();
mongoTemplate.findAndModify(query, update, User.class)
//.doOnSuccess(bsItem -> {
.flatMap(user -> {
if(user.getItemId().equals(userIn.getId("_id")))
resp.setStatus("Updated");
else
resp.setStatus("Failed");
return Mono.just(resp);
}).subscribe();
return Mono.just(resp.getStatus());
}
即使更新发生在 mongodb,它在返回时抛出 NPE。这里执行reactor operator后如何获取控制权?
您几乎不应该在自己的应用程序中订阅。
订阅者是发起调用的客户端,在这种情况下它可能是 Web 应用程序。您的应用程序只是中继数据,因此您的应用程序是发布者,这意味着您不应该订阅。网络应用订阅。
试试这个。
@Autowired
ReactiveMongoTemplate mongoTemplate;
public Mono<String> updateUser(UserIn userIn) {
return mongoTemplate.findAndModify(query, update, User.class)
.flatMap(user -> {
final UserResponse resp = new UserResponse();
if(user.getItemId().equals(userIn.getId("_id")))
resp.setStatus("Updated");
else
resp.setStatus("Failed");
return Mono.just(resp.getStatus());
});
}
单声道不像流,您获取、映射和 return,都在同一个单声道中,就像一连串的事件。一个事件链。
我正在尝试更新 MongoDB 中的文档,但无法检查更新状态并回复用户。下面是我的代码:
@Autowired
ReactiveMongoTemplate mongoTemplate;
public Mono<String> updateUser(UserIn userIn) {
UserResponse resp = new UserResponse();
mongoTemplate.findAndModify(query, update, User.class)
//.doOnSuccess(bsItem -> {
.flatMap(user -> {
if(user.getItemId().equals(userIn.getId("_id")))
resp.setStatus("Updated");
else
resp.setStatus("Failed");
return Mono.just(resp);
}).subscribe();
return Mono.just(resp.getStatus());
}
即使更新发生在 mongodb,它在返回时抛出 NPE。这里执行reactor operator后如何获取控制权?
您几乎不应该在自己的应用程序中订阅。
订阅者是发起调用的客户端,在这种情况下它可能是 Web 应用程序。您的应用程序只是中继数据,因此您的应用程序是发布者,这意味着您不应该订阅。网络应用订阅。
试试这个。
@Autowired
ReactiveMongoTemplate mongoTemplate;
public Mono<String> updateUser(UserIn userIn) {
return mongoTemplate.findAndModify(query, update, User.class)
.flatMap(user -> {
final UserResponse resp = new UserResponse();
if(user.getItemId().equals(userIn.getId("_id")))
resp.setStatus("Updated");
else
resp.setStatus("Failed");
return Mono.just(resp.getStatus());
});
}
单声道不像流,您获取、映射和 return,都在同一个单声道中,就像一连串的事件。一个事件链。