2012-02-07 3 views
8

Dartには、Isolatesの概念があります。私はダートで実験しているアプリケーションで、各呼び出し(データベース呼び出し)は前の呼び出しに依存する非同期IOをたくさん持っています。だから私は入れ子にされたコールバック地獄に終わった。Dartでいくつかの非同期I/Oアクションをきれいに(分離する)するにはどうすればよいですか?

アイソレートがそのネストされたコールバックスープを解決できるかどうか疑問に思っていましたが、少し冗長に見えますが、それがうまく収まるかどうかはわかりません。

次のECMAScript Harmonyで提案されているこれらの問題を解決するジェネレータもありますが、ダーツでは現在、非同期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")));

これは私にとって今最も魅力的な解決策ではありません。

関連する問題