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()
使用し、コールバックですべてのロジックを実行することです。これはご存知のようです。したがって、ここでのコードは単なる例であり、実際には行っていないと想定しています。これで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...
}