我试图创建一个服务器端的Dart类,执行各种数据相关的任务。所有这些任务都依赖于数据库首先已经被初始化。问题是数据库的初始化是异步的(返回一个Future)。我最初尝试将初始化代码放入构造函数中,但是放弃了这种方法,因为似乎不可行。
我现在正在尝试找出如何强制执行DB初始化作为访问数据的任何方法调用的第一步。因此,换句话说,在调用attemptLogin()时,我想首先检查DB是否已经初始化并在必要时进行初始化。
然而,有两个障碍。如果尚未初始化数据库,则代码很简单-初始化db,然后使用返回的future的then()方法来完成函数的其余部分。如果尚未初始化db,我该将then()方法附加到什么上?
第二个相关问题是当数据库正在初始化,但该过程尚未完成时会发生什么?我如何拉取并返回这个“正在进行中”的Future?
这是我试图整理的基本代码的梗概:
class DataManager {
bool DbIsReady = false;
bool InitializingDb = false;
Db _db;
Future InitMongoDB() {
print("Initializing MongoDB");
InitializingDb = true;
_db = new Db("mongodb://127.0.0.1/test");
return _db.open().then((_) {
DbIsReady = true;
InitializingDb = false;
});
}
Future<List> attemptLogin(String username, String password) {
Future firstStep;
if ((!DbIsReady) && (!InitializingDb) {
Future firstStep = InitMongoDB()
}
else if (InitializingDb) {
// Need to return the InitMongoDB() Future that's currently running, but how?
}
else {
// How do I create a blank firstStep here?
}
return firstStep.then((_) {
users = _db.collection("users");
return // ... rest of code cut out for clarity
});
}
}
谢谢您提前的帮助。
Greg