延伸未来

时间:2013-12-17 17:54:59

标签: dart extends dart-async

我发现很多关于使用但不是关于在Dart中定义期货。假设我有letsWait()这需要相当长的时间。我如何使用Future类?

import 'dart:async';

void main() {
  print('Let\'s get started');
  ArtificialWait waitPoint = new ArtificialWait();
  Future<String> future = waitPoint.letsWait();
  // and how about printing the return here?
  print('something fast');
}

class ArtificialWait extends Future<String> {
  String letsWait() {
    for (var i = 0; i < 5000000000; i++) {
      // lol
    }
    return 'finally';
  }
}

这个尝试给了我一个:

unresolved implicit call to super constructor 'Future()' class ArtificialWait extends Future<String> {

2 个答案:

答案 0 :(得分:2)

我不知道你为什么要继承Future。 通常你会使用它:

import 'dart:async';

void main() {
  print('Let\'s get started');
  artificialWait().then((e) => print(e));
  // and how about printing the return here?
  print('something fast');
}

Future<String> artificialWait  () {
  var completer = new Completer<String>();
  Timer.run(() {
    for (var i = 0; i < 5000000000; i++) {
      // lol
    }
    completer.complete('finally');
  });
  return completer.future;
}

答案 1 :(得分:2)

而不是试图延伸未来,你只需要“使用”未来。

import 'dart:async';

void main() {
  print('Let\'s get started');
  ArtificialWait waitPoint = new ArtificialWait();
  Future<String> future = waitPoint.letsWait();
  // and how about printing the return here?
  print('something fast');
}

class ArtificialWait {
  Future<String> letsWait => new Future<String>(_letsWait);

  String _letsWait() {
    for (var i = 0; i < 5000000000; i++) {
      // lol
    }
    return 'finally';
  }
}

除非在某些情况下,否则通常可以在不使用完成者的情况下构建未来。 Future的默认构造函数将自动将您传递的函数(不带参数)包装在Timer.run()中,以异步执行它。