在 Slick 中等待语句执行完成

Await statement execution completion in Slick

在我的测试中,我有一些数据库操作在测试级别没有公开为 Futures。有时,我的测试 运行 足够快,以至于我的清理 close() 发生在这些数据库操作完成之前,然后我得到了丑陋的错误。有没有办法检测有多少语句正在运行或以其他方式推迟 close()?

当您执行查询时,您会得到 Future[A],其中 A 是查询的结果。

您可以使用 Future.sequence() 组合所有查询以获得单个未来 composedFuture,当您的所有查询都返回结果时,它将完成。

现在您可以使用 composedFuture.map(_ => close()) 来确保所有查询都已完成执行,然后关闭资源。

最好的选择是将动作公开为未来,然后组合它们。 否则,您可以输入 Thread.sleep(someSensibleTime) 并希望您的未来在 someSensibleTime 内完成,但这会使您的测试缓慢且容易出错。

我认为它可能依赖于数据库而不是依赖于 slick-dependent。

例如,mysql 技术允许您查看当前 运行 查询与查询 "show processlist",并采取相应的行动。

如果那不是一个选项,我想您可以轮询数据库以观察选定的副作用,然后关闭()?