1

ステップ 2 の後で dart が関数を「aFunction」と呼ぶのはなぜですか? このコードをコンソールで実行すると、以下のテキストが表示されます。

ステップ2 ステップ1

私のコード:

void main()
{
 ...
 stream.listen(aFunction);
 print("Step2");
 ...
}

void aFunction()
{
 print("Step1");
}

手伝ってくれてありがとう。

4

2 に答える 2

3

Dart Stream が約束する数少ない約束の 1 つは、listen 呼び出しに応答してイベントを生成しないことです。イベントは後で発生する可能性がありますが、「listen」を呼び出すコードは、最初のイベントが発生する前に続行して完了することができます。元々、リッスンするとすぐにストリームを起動できるようにしていましたが、それをプログラムしようとすると、実際には完全に制御できませんでした。

'then' など、未来を聞く場合も同様です。コールバックがすぐに来ることはありません。

イベントは通常、トップレベルのイベント ループによって起動されたかのように動作する必要があるため、イベント ハンドラーは、他のコード (再入可能ではない可能性がある他のコード) が実行されているかどうかを気にする必要はありません。

実際には常にそうであるとは限りません。1 つのイベント ハンドラーが同期ストリーム コントローラーを介して他のイベントをトリガーし、1 つのイベントを別のイベントに効果的に変換することができます。そのためには、イベント ハンドラーが何をしているのかを知る必要があります。同期コントローラーは、ストリーム トランスフォーマーなどの内部での使用を目的としており、同期ストリーム コントローラーの使用は一般的には推奨されません。

したがって、いいえ、リッスン呼び出しですぐにコールバックをトリガーすることはできません。

于 2014-02-13T14:55:45.213 に答える