8

DartにはIsolatesという概念があります。各呼び出し (データベース呼び出し) が前の呼び出しに依存する非同期 IO が多数あるアプリケーション (Dart で実験中) があります。そのため、ネストされたコールバック地獄に陥りました。

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

これらの問題を解決できる次の ECMAScript Harmony で提案されているジェネレーターもありますが、現在、Dart で多くの非同期 IO をクリーンな方法で行うにはどうすればよいでしょうか?

4

1 に答える 1

6

Future'sCompletersを使用して、作業を連鎖させることができます。次のfutureは、プロセスからの「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; 
}; 

次に、次のようにチェーンします。

fetch('/')。then((val)=> fetch( "/ usr")。then((val)=> fetch( "/ tmp")));

最もきれいな解決策ではありませんが、これは私が今やっているものです。

于 2012-02-07T23:25:07.100 に答える