控制特定用例的反应器执行(或在特定点获得响应)

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,都在同一个单声道中,就像一连串的事件。一个事件链。