在Dart中,有一个孤立的概念。我有一个应用程序(我在Dart中进行实验),它有很多异步IO,每次调用(它们都是数据库调用)都依赖于前一个。所以我最终陷入了一个嵌套的回调地狱。
我想知道Isolates是否可以解决那个嵌套的回调汤,但它看起来有点冗长,我不确定它是否适合它。
在下一个ECMAScript Harmony中也提出了可以解决这些问题的Generators,但是你现在如何以干净的方式在Dart中做很多异步IO?
答案 0 :(得分:6)
您可以使用Future's和Completers将工作链接在一起。以下将来会从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)=&gt; fetch(“/ usr”)。then((val)=&gt; fetch(“/ tmp”)));
不是最漂亮的解决方案,但这就是我现在所能得到的。