Dart 你还活着: 类数据管理器{ 未来(b)初始化;; Future initMongoDb(){…} 未来尝试登录(字符串用户名、字符串密码){ 如果(_initializedb==null){ _initializedDb=initMongoDB(); } 返回_initializedb.then((db){ 用户=数据库集合(“用户”); return/…为清晰起见,代码的其余部分被删除 }); } }

Dart 你还活着: 类数据管理器{ 未来(b)初始化;; Future initMongoDb(){…} 未来尝试登录(字符串用户名、字符串密码){ 如果(_initializedb==null){ _initializedDb=initMongoDB(); } 返回_initializedb.then((db){ 用户=数据库集合(“用户”); return/…为清晰起见,代码的其余部分被删除 }); } },dart,dart-async,Dart,Dart Async,您可能需要注意错误案例。如果您想处理initMongoDB中或之后的错误,则由您决定。我会发现,在任何与数据库相关的代码运行之前,而不是在每个数据库操作之前,确保数据库初始化更容易。你这样做有什么原因吗?@Günter我最初试图在类构造函数中执行DB init,但在测试中遇到了问题。我在这里的StackOverflow上发布了一个关于这个问题的问题,但是没有得到关于如何解决这个问题的好答案。我为你的另一个问题添加了一个答案。我还没有测试过它,但至少它应该可以帮助您了解这个想法。您认为解决这个问题

您可能需要注意错误案例。如果您想处理
initMongoDB
中或之后的错误,则由您决定。

我会发现,在任何与数据库相关的代码运行之前,而不是在每个数据库操作之前,确保数据库初始化更容易。你这样做有什么原因吗?@Günter我最初试图在类构造函数中执行DB init,但在测试中遇到了问题。我在这里的StackOverflow上发布了一个关于这个问题的问题,但是没有得到关于如何解决这个问题的好答案。我为你的另一个问题添加了一个答案。我还没有测试过它,但至少它应该可以帮助您了解这个想法。您认为解决这个问题的更好方法是什么?您是说您可以链接到一个完整的未来,还是一个未来的中期执行?我在任何例子中都没有看到过这种情况,也没有关于这种情况的文档。作为未来的用户,你永远不知道这个值是否已经存在。所以这是正常的行为。但是,出现错误时,futures必须至少有一个侦听器。否则,错误将被视为未经处理,并可能导致程序停止运行。这意味着您应该始终尽快添加至少一个错误处理程序。
Initializing...
Waiting until initialized
Initialized
query: SELECT 1
query: SELECT * FROM users
Goodbye