簡體   English   中英

Dart異步/等待封裝

[英]Dart async/await encapsulation

我想返回小數部分,但是如果該函數花費太多時間,則該函數必須放棄。 我試過了,但是沒用...我可能做錯了什么。 你能告訴我我的錯誤嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM