有没有办法同步运行Dart的未来?

时间:2013-02-11 20:57:02

标签: dart

如何立即获得Future的结果?例如:

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

3 个答案:

答案 0 :(得分:5)

the support of await处于实验状态,可以像:

一样使用
void main() async {
  ProcessResult result = await Process.run('some_shell_command', []);
  print(result.stdout); // I have the output here...
}

答案 1 :(得分:2)

抱歉,这根本不可能。

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

  1. 这不是其中之一。进程由VM完全异步运行。
  2. 直接访问Future的值的能力已在libv2更新中删除。
  3. 处理这个问题的方法是让包含Process.run()的函数返回Future,并在回调中完成所有逻辑,你似乎知道,所以我假设你的代码只是一个例如,你并没有真正在main()中这样做。在那种情况下,不幸的是,你基本上没有运气 - 如果你依赖于了解未来价值或者操作已经完成,你必须使你的功能异步。

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

答案 2 :(得分:2)

没有

acync API的重点,当异步操作完成时,您的代码会将结果作为回调接收。

编写代码的另一种方法是,如果你想减少嵌套,可以通过 将函数传递给then()

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

void doSomethingWithResult(result) {
   print(result.stdout); // I have the output here...
}