gpt4 book ai didi

java-8 - 如何将对象保存到通量内的 react 性存储库

转载 作者:行者123 更新时间:2023-12-02 08:06:13 25 4
gpt4 key购买 nike

我有问题的答案列表。我想保存这些答案,然后(在 mongo 给他们一个 id 之后)将它们添加到他们的问题中。

现在我是这样做的:

public Flux<Answer> createAnswers(List<Answer> answers) {
return answerRepository.saveAll(answers)
.map(answer -> {
questionRepository.findById(answer.getQuestionId())
.subscribe(question -> {
question.getAnswers().removeIf(ans -> Objects.equals(ans.getId(), answer.getId()));
question.getAnswers().add(answer);
questionRepository.save(question).block();
});
return answer;
});
}

我也尝试使用 ..saveAll(answers).doOnNext()doOnEach() 但这种方式不会保存问题。

似乎 map 用于转换数据,但不用于对每个元素进行操作。另外,我对调用 block() 有点困惑。

有没有更好的方法来实现我的目标?

最佳答案

你永远不应该在一个返回 react 类型本身。

这样做会使当前管道与您要实现的目标脱钩。最好的情况,这将打破背压支持。在许多情况下,这也可能以令人惊讶的方式中断;例如,如果您的方法正在处理 HTTP 请求/响应或某种 session ,响应/ session 可能会关闭,而您的其他订阅者仍在尝试对其执行某些操作。

我相信这样的事情更一致(虽然我在这里遗漏了很多上下文,所以它可能不是实现这一点的最佳方式):

public Flux<Answer> createAnswers(List<Answer> answers) {
return answerRepository.saveAll(answers)
.flatMap(answer -> {
return questionRepository
.findById(answer.getQuestionId())
.flatMap(question -> {
question.getAnswers().removeIf(ans -> Objects.equals(ans.getId(), answer.getId()));
question.getAnswers().add(answer);
return questionRepository.save(question);
})
.thenReturn(answer);
});
}

关于java-8 - 如何将对象保存到通量内的 react 性存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51235724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com