如何干净地完成Dart中的几个异步I/O操作(隔离)?

Tow*_*wer 8 dart dart-isolates dart-async

在Dart中,有一个隔离概念.我有一个应用程序(我在Dart中进行实验),它有很多异步IO,每次调用(它们都是数据库调用)都依赖于前一个.所以我最终陷入了嵌套的回调地狱.

我想知道Isolates是否可以解决那个嵌套的回调汤,但它看起来有点冗长,我不确定它是否适合它.

在下一个ECMAScript Harmony中也提出了可以解决这些问题的Generators,但是你现在如何以干净的方式在Dart中做很多异步IO呢?

Lar*_*ann 6

您可以使用FutureCompleters将工作链接在一起.以下将来从进程返回'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; 
}; 
Run Code Online (Sandbox Code Playgroud)

你可以像这样链接在一起:

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

不是最漂亮的解决方案,但这是我现在所能得到的.