8

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

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

下一个 ECMAScript Harmony 中还提出了可以解决这些问题的生成器,但是您目前如何以干净的方式在 Dart 中执行大量异步 IO?

4

1 回答 1

6

您可以使用Future'sCompleters将工作链接在一起。以下未来返回来自进程的“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 回答