我发现很多关于在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> {
发布于 2013-12-17 18:03:40
我不知道你为什么要继承未来。通常情况下,您会这样使用:
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;
}发布于 2013-12-17 20:23:03
你只需要“利用”未来,而不是试图延长未来。
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';
}
}一般来说,除非在某些情况下,否则可以不用完全器来建造未来。未来的默认构造函数将自动将传递的函数(不带参数)包装在Timer.run()中,以便异步执行它。
https://stackoverflow.com/questions/20641336
复制相似问题