2013-12-17 2 views
1

Я нахожу довольно много об использовании, но не об определении фьючерсов в Дарт. Допустим, у меня есть 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

Я не знаю, почему вы хотите, чтобы наследовать от будущего. Обычно вы будете использовать это как:

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

Спасибо за быстрый тщательный ответ. Кажется, есть еще некоторые понятия, к которым я должен привыкнуть :) – wellnoidea

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(), чтобы выполнить ее асинхронно.

+0

Спасибо за быстрый тщательный ответ. Кажется, есть еще некоторые концепции, к которым я должен привыкнуть :) – wellnoidea

Смежные вопросы