如何立即获得Future的结果?例如:
void main() {
Process.run('some_shell_command', []).then((ProcessResult result) {
print(result.stdout); // I have the output here...
});
// ... but want it here.
}
答案 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)
并且可以想象您可以获得该值,但是:
处理这个问题的方法是让包含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...
}