Spring WebFlux: block() 方法 return Spring 数据反应中的 null MongoDB

Spring WebFlux: block() method return null in Spring Data Reactive MongoDB

我正在尝试学习 Reactor 项目但遇到了问题。

@Test
@DisplayName("check that standaloneUser fields are correct")
void validateUserFields() {
    userService.save(standaloneUser).subscribe();
    assertEquals(userService.count().block(), Long.valueOf(1));
    User user = userService.findByEmail("test@gmail.com").block();
    assertNotNull(user);
    assertNotNull(user.getId());
    assertEquals(user.getFirstName(), "test");
    assertEquals(user.getLastName(), "test");
    assertNotEquals(user.getPassword(), "test");
    assertEquals(user.getRole(), Role.CANDIDATE);
    assertNotNull(user.getCreatedDate());
    assertNull(user.getStoppedDate());
    assertEquals(user.getEmail(), "test@gmail.com");
}

有时 block() 方法 returns 为空。 谁能给我解释一下? 谢谢

block() can return null,这意味着Mono完成为空,在这种情况下意味着找不到用户.

难道是没有保存好? (尽管您声明了用户数)

请注意,您会 userService.save(standaloneUser).subscribe()。这种形式通常并不理想,因为它是 "async fire-and-forget":

  • 异步 -> 它可能会在 之后完成后续断言
  • 即发即忘 -> 没有错误处理程序意味着它可能会因错误而终止并对您隐藏

养成在调用 subscribe.

时至少设置 onNext 和 onError 处理程序 lambda 的习惯