dart - Dart异步/等待封装

标签 dart dart-async

我想返回小数部分,但是如果该函数花费太多时间,则该函数必须放弃。我试过了,但是没用...我可能做错了。你能告诉我我的错误吗?

String decimalToFractional(double d) async {
  var df = 1.0;
  var top = 1;
  var bot = 1;

  var future = new Future<String>(() {
    while (df != d) {
      if (df < d) {
        top += 1;
      } else {
        bot += 1;
        top = (d * bot).toInt();
      }
      df = top / bot;
    }
    return new Future.value('$top/$bot');
  });
  future.timeout(new Duration(seconds: 2), onTimeout: () => new Future.value(d.toString()));
  return await future;
}

最佳答案

此代码有几个问题。
如果要返回异步操作的结果,则返回类型必须为Future<...>

Future<String> decimalToFractional(double d) async {

然后,您可以像这样消耗结果
main() async {
  print(await decimalToFractional(123456789.123456789));
}

如果要使超时生效,则需要返回事件循环。只要同步执行正在运行,超时就不会触发。
另请参阅https://stackoverflow.com/a/22473556/217408

关于dart - Dart异步/等待封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30186108/

相关文章:

linux - flutter_webview_plugin 不断加载

flutter - 如何在Flutter中将图像转换为Base64

dart - Dart编辑器调试器无法正常工作

Dart/Flutter - 回调函数中的 "yield"

asynchronous - Dart Lang:避免使用异步标记所有功能

dart - 等待流脉冲x时间,然后继续

angular - 在AngularDart中正确使用流

dart - 如何比较客户端的系统时间和互联网服务器的日期时间(实际本地时间)

Flutter - StreamBuilder 在更改页面并返回后似乎没有收听流

dart - 如何在 Dart 中获取 Completer.CompleteException(exception, stackTrace); 的当前堆栈跟踪;