2012-02-07 21 views
8

在Dart中,有一個Isolates的概念。我有一個應用程序(我正在Dart中進行試驗),它有很多異步IO,每個調用(它們都是數據庫調用)都依賴於前一個。所以我結束了一個嵌套的回調地獄。如何在Dart中乾淨地執行幾個異步I/O操作(隔離)?

我想知道隔離是否可以解決嵌套的回調湯,但它看起來有點冗長,我不確定它是否適合它。

在下一個ECMAScript Harmony中還提出了可以解決這些問題的發生器,但是您目前如何以乾淨的方式在Dart中執行大量異步IO?

回答

6

您可以使用Future'sCompleters鏈接在一起工作。以下將來從process返回 'ls' 的命令的結果:

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; 
}; 

然後可以鏈在一起這樣的:

取( '/'),那麼(( val)=> fetch(「/ usr」)。then((val)=> fetch(「/ tmp」)));

不是最漂亮的解決方案,但這是我現在得到的。

相關問題