【问题标题】:How to do several asynchronous I/O actions in Dart cleanly (Isolates)?如何在 Dart 中干净利落地执行多个异步 I/O 操作(Isolates)?
【发布时间】:2012-02-07 21:34:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: dart dart-async dart-isolates


    【解决方案1】:

    您可以使用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; 
    }; 
    

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

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

    不是最漂亮的解决方案,但这就是我现在得到的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 2016-03-27
      • 2015-10-14
      • 2015-07-24
      • 2011-11-14
      • 2011-11-28
      • 2016-07-29
      相关资源
      最近更新 更多