我怎样才能立即得到 Future 的结果?例如:
void main() {
Process.run('some_shell_command', []).then((ProcessResult result) {
print(result.stdout); // I have the output here...
});
// ... but want it here.
}
我怎样才能立即得到 Future 的结果?例如:
void main() {
Process.run('some_shell_command', []).then((ProcessResult result) {
print(result.stdout); // I have the output here...
});
// ... but want it here.
}
的支持await
处于实验状态,可以像这样使用:
void main() async {
ProcessResult result = await Process.run('some_shell_command', []);
print(result.stdout); // I have the output here...
}
对不起,这根本不可能。
在某些情况下,函数返回new Future.immediate(value)
并且可以想象您可以获得该值,但是:
处理此问题的方法是让包含Process.run()
返回 Future 的函数,并在回调中执行您似乎知道的所有逻辑,所以我假设您的代码只是一个示例,而您并没有真正做这在main()
. 在这种情况下,不幸的是,你基本上不走运 - 如果你依赖于知道未来值或操作已经完成,你必须使你的函数异步。
单线程环境中的异步,如 Dart 和 Javascript,是病毒式的,并且总是向上传播你的调用堆栈。每个调用这个函数的函数,以及调用它们的每个函数,等等,都必须是异步的。
不。
当异步操作完成时,您的代码将结果作为回调接收到 acync API 的全部意义。
如果您希望减少嵌套,另一种编写代码的方法可能是将函数传递给then()
void main() {
Process.run('some_shell_command', []).then(doSomethingWithResult);
}
void doSomethingWithResult(result) {
print(result.stdout); // I have the output here...
}