2013-02-11 5 views
5

どのようにしてFutureの結果をすぐに得ることができますか?例:ダーツの未来を同期して実行する方法はありますか?

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

私はそれを行う簡単な方法はありません。コールバックを使用する際の問題は何ですか?コールバックネストを減らそうとしていますか? –

+0

可能かどうかだけ知りたい。 – Leksat

答えて

2

申し訳ありませんが、単純にできません。

あり関数がnew Future.immediate(value)を返し、多分あなたが値を得ることができるいくつかの例がありますが、:これは、これらの例の一つではありません

  1. 。プロセスは、VMによって完全に非同期で実行されます。
  2. 将来の値に直接アクセスする機能は、libv2アップデートでは削除されました。これを処理する方法

は、関数が将来を返すProcess.run()含む持っている、とあなたが知っているように見えるのコールバック、中にすべてのあなたのロジックを行うことですので、私はここにあなたのコードは一例であると仮定していますあなたは実際にmain()でこれをやっているわけではありません。その場合、残念ながら、基本的には不運です。将来価値を知っているか、操作が完了している場合は、関数を非同期にする必要があります。

ダーツとJavascriptのようなシングルスレッド環境での非同期はウィルスであり、常に呼び出しスタックを伝播します。この関数を呼び出すすべての関数とそれを呼び出す関数はすべて非同期でなければなりません。

2

非同期動作が終了したときに、コードがコールバックとして結果を受け取ることacyncのAPIの全体のポイント番号。あなたのコードを書くための

別の方法として、あなたはネストを減らすために探しているなら、 によって可能性がありthen()

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

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

the support of awaitに機能して渡すと、実験的な状態であり、同様に使用することができます:

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

http://stackoverflow.com/questions/27212220も参照してください。 –

関連する問題