有没有办法运行Dart';未来是同步的吗?

有没有办法运行Dart';未来是同步的吗?,dart,Dart,我怎样才能立即得到未来的结果?例如: void main(){ Process.run('some_shell_command',[])。然后((ProcessResult){ 打印(result.stdout);//我在这里有输出。。。 }); //…但我想把它放在这里。 } 对不起,这根本不可能 在某些情况下,函数返回新的Future.immediate(value),可以想象得到该值,但是: 这不是那种情况。进程由VM完全异步运行 libv2更新中删除了直接访问未来值的功能 处理这个问题的

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

void main(){
Process.run('some_shell_command',[])。然后((ProcessResult){
打印(result.stdout);//我在这里有输出。。。
});
//…但我想把它放在这里。
}

对不起,这根本不可能

在某些情况下,函数返回新的Future.immediate(value),可以想象得到该值,但是:

  • 这不是那种情况。进程由VM完全异步运行
  • libv2更新中删除了直接访问未来值的功能
  • 处理这个问题的方法是让包含
    Process.run()
    的函数返回一个未来,并在回调中执行所有逻辑,您似乎知道这一点,因此我假设这里的代码只是一个示例,而您并不是在
    main()
    中执行此操作。不幸的是,在这种情况下,您基本上是运气不佳的——如果您依赖于了解未来值或操作已完成,则必须使函数异步

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

    acync API的全部要点是,当异步操作完成时,代码将作为回调接收结果

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

    void main(){
    运行('some_shell_command',[]),然后(doSomethingWithResult);
    }
    无效doSomethingWithResult(结果){
    打印(result.stdout);//我在这里有输出。。。
    }
    
    处于实验状态,可按如下方式使用:

    void main()异步{
    ProcessResult=wait Process.run('some_shell_command',[]);
    打印(result.stdout);//我在这里有输出。。。
    }
    
    我看不出一种简单的方法。使用回调有什么问题?你只是想减少回调嵌套吗?只是想知道这是否可能。原来的问题似乎更具风格,所以等待肯定是正确的答案。也就是说,似乎可以通过自定义Future实现立即执行的Future,例如颤振。注意,doc也强烈反对使用它,因为“调试这种双峰行为非常困难”。