2012-02-07 11 views
8

W Dart, istnieje pojęcie Izolatów. Mam aplikację (którą eksperymentuję w Dart), która ma dużo asynchronicznego IO, gdzie każde wywołanie (są to wywołania bazy danych) jest zależne od poprzedniego. Więc znalazłem się w zagnieżdżonym piekle oddzwaniania.Jak wykonać kilka asynchronicznych operacji wejścia/wyjścia w czystym widoku (izoluje)?

Zastanawiam się, czy Isolates może rozwiązać tę zagnieżdżoną zupę oddzwaniową, ale wygląda trochę głupio i nie jestem pewien, czy pasuje to dobrze.

Istnieją również generatory proponowane w następnej harmonii ECMAScript, które mogą rozwiązać te problemy, ale jak obecnie wykonujesz wiele asynchronicznych operacji wejścia w Dart w czysty sposób?

Odpowiedz

6

Możesz użyć Future's i Completers, aby połączyć łańcuchy. Poniższa przyszłość zwraca wynik z polecenia 'ls' z process:

Future<String> fetch(String dir) { 
    final completer = new Completer(); 
    Process process = new Process.start('ls', [dir]); 
    process.exitHandler = (int exitCode) { 
    StringInputStream stringStream = new StringInputStream(process.stdout); 
    stringStream.dataHandler =() { 
     String content = stringStream.read(); 
     completer.complete(content); 
     process.close(); 
    }; 
    }; 
    process.errorHandler = (var error) { 
    completer.completeException(error); 
    return true; 
    }; 
    return completer.future; 
}; 

które można następnie łańcucha razem tak:.

fetch ('/'), a następnie ((val) => fetch ("/ usr"). then ((val) => fetch ("/ tmp")));

Nie jest to najprzystojniejsze rozwiązanie, ale to jest to, co mam teraz.

Powiązane problemy