2013-08-24 11 views
12

jest to możliwe, aby stworzyć własną przyszłość w Dart, aby powrócić z twoich metod, czy zawsze powinieneś zwrócić zbudowany w przyszłości powrót z jednej z metod bibliotek asynchronicznych?Dart, jak stworzyć przyszłość, aby powrócić we własnych funkcjach?

Chcę zdefiniować funkcję, która zawsze zwraca Future<List<Base>> czy jego faktycznie robi połączenia transmisji asynchronicznej (plik odczytu/ajax/etc) lub po prostu uzyskanie zmiennej lokalnej, jak poniżej:

List<Base> aListOfItems = ...; 

Future<List<Base>> GetItemList(){ 

    return new Future(aListOfItems); 

} 

Odpowiedz

20

Jeśli potrzebujesz aby stworzyć przyszłość, możesz użyć Completer. Zobacz Completer class w dokumentach. Oto przykład:

Future<List<Base>> GetItemList(){ 
    var completer = new Completer(); 

    // At some time you need to complete the future: 
    completer.complete(new List<Base>()); 

    return completer.future; 
} 

Ale większość czasu nie trzeba tworzyć z finałem. Podobnie jak w tym przypadku:

Future<List<Base>> GetItemList(){ 
    var completer = new Completer(); 

    aFuture.then((a) { 
    // At some time you need to complete the future: 
    completer.complete(a); 
    }); 

    return completer.future; 
} 

Kod może stać się bardzo skomplikowany przy użyciu uzupełnień. można po prostu użyć następujących zamiast, ponieważ then() zwraca Future też:

Future<List<Base>> GetItemList(){ 
    return aFuture.then((a) { 
    // Do something.. 
    }); 
} 

lub przykład dla plików IO:

Future<List<String>> readCommaSeperatedList(file){ 
    return file.readAsString().then((text) => text.split(',')); 
} 

Zobacz this blog post więcej porad.

Powiązane problemy