嘿,我已经阅读了我能找到的有关 future 的所有内容,但我想获得一些有关正确使用的更多建议。
我正在编写一个 API 库,它可以弥合 HTTP 请求和应用程序之间的差距。因此,在大多数情况下我使用 HTTP 返回的 future,但有时数据已经被检索到。现在是使用 Completer 的合适时机吗?
例如。
String _someData = "";
Future<String> getSomeData(){
if (_someData == ""){
return Api.getSomeData().then((String someData){
_someData = someData;
return _someData;
});
} else {
var completer = new Completer();
completer.complete(_someData);
return completer.future;
}
}
-edit- 另外,如果我创建了一个 Completer,但最终没有使用它的 future 或调用complete。这会导致内存泄漏吗?我应该调用它的完整方法还是以某种方式处理它?</p>
谢谢:)
最佳答案
如果可以立即访问该值,则可以使用命名构造函数 Future.value
。您不需要Completer
。
String _someData = "";
Future<String> getSomeData(){
if (_someData == ""){
return Api.getSomeData().then((String someData){
_someData = someData;
return _someData;
});
} else {
return new Future.value(_someData);
}
}
对于你的第二个问题,如果你创建一个Completer
而不使用它,我猜垃圾收集器会在你的代码中不再引用它时简单地释放它的内存。
关于dart - 关于使用 Future 和 Completers 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30689329/