dart - 关于使用 Future 和 Completers 的问题

标签 dart dart-async

嘿,我已经阅读了我能找到的有关 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/

相关文章:

dart - 执行 future 直到参数变为真

dart - 高效地将图像文件流式传输到 HttpResponse

dart - 如何使用流发送http响应

flutter - flutter/dart : Any downsides to async/await vs. raw Future API 中的异步模式?

flutter - 带有 map 和信息面板的应用程序屏幕应在按钮单击或向下滑动时隐藏和显示面板

dart - 在 flutter 中使用其 GlobalKey 获取 Widget 的高度

android - Flutter:类型 'Future<bool>' 不是类型转换中类型 'bool' 的子类型

flutter - 没有名称为 'nullOk' 的命名参数。上下文 != null ? Localizations.localeOf(上下文,nullOk : true) : null,

flutter - 如何从Flutter中的Text Widget检索文本数据

ajax - 测试dart ajax HttpRequest