我怎样才能让工厂内部的这个 Future 同步?我在这里将 null 返回给客户端。
factory Project.retrieve(String hash, CompetencesService service) {
Project project;
service.dbRef.child("project").once("value").then((snapshot) {
Map val = snapshot.val();
project = toObservable(new Project.fromJson(val));
if(project != null) {
project.listen(service);
print("listening1");
} else {
project = toObservable(new Project.newHash(hash));
service.dbRef.child("project").update(project.toJson()).then((error) {
if(error) {
//
} else {
project.listen(service);
print("listening2");
}
});
}
});
return project;
}
有人asked为此,但我正在寻找解决方法的示例。
最佳答案
目前没有办法创建异步构造函数或工厂,以及同步等待 Future
.
后者有一个明显的原因:如果您将停止并同步等待依赖于当前隔离本身的某些东西(不是文件 i/o 之类的外部事件),它将永远不会发生,如 Isolate
处于单线程中,该线程在等待状态中停止。
因此,这里唯一的方法是让静态方法返回 Future
与 Project
例如,就像您提供的链接中提到的那样:
static Future<Project> retrieve() async {
var snapshot = await service.dbRef.child("project").once("value");
Project project = toObservable(new Project.fromJson(snapshot.val()));
...
return project; // Note you're actually returning a Future here
}
关于dart - 工厂等待 Future 来构造对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31172092/