8

我怎样才能立即得到 Future 的结果?例如:

void main() {
  Process.run('some_shell_command', []).then((ProcessResult result) {
    print(result.stdout); // I have the output here...
  });
  // ... but want it here.
}
4

3 回答 3

7

的支持await处于实验状态,可以像这样使用:

void main() async {
  ProcessResult result = await Process.run('some_shell_command', []);
  print(result.stdout); // I have the output here...
}
于 2013-02-11T21:54:18.707 回答
2

对不起,这根本不可能。

在某些情况下,函数返回new Future.immediate(value)并且可以想象您可以获得该值,但是:

  1. 这不是其中一种情况。进程完全由 VM 异步运行。
  2. 在 libv2 更新中删除了直接访问 Future 值的能力。

处理此问题的方法是让包含Process.run()返回 Future 的函数,并在回调中执行您似乎知道的所有逻辑,所以我假设您的代码只是一个示例,而您并没有真正做这在main(). 在这种情况下,不幸的是,你基本上不走运 - 如果你依赖于知道未来值或操作已经完成,你必须使你的函数异步。

单线程环境中的异步,如 Dart 和 Javascript,是病毒式的,并且总是向上传播你的调用堆栈。每个调用这个函数的函数,以及调用它们的每个函数,等等,都必须是异步的。

于 2013-02-11T21:24:48.443 回答
0

不。

当异步操作完成时,您的代码将结果作为回调接收到 acync API 的全部意义。

如果您希望减少嵌套,另一种编写代码的方法可能是将函数传递给then()

void main() {
  Process.run('some_shell_command', []).then(doSomethingWithResult);  
}

void doSomethingWithResult(result) {
   print(result.stdout); // I have the output here...
}
于 2013-02-11T21:29:33.593 回答