1

次のコードがあるとしましょう:

$.when(func1(),funct2(),func3())
 .done(...)
 .fail(...);

これらの関数が解決されたときに jQuery が連続して呼び出す場合、これらの関数がすべてすぐに呼び出されるかどうかを知りたいです。ドキュメントによると、非同期で実行されるようです。

複数の Deferred オブジェクトが jQuery.when に渡される場合、このメソッドは、渡されたすべての Deferred の集約状態を追跡する新しい「マスター」Deferred オブジェクトから Promise を返します。

...

Deferred の 1 つが拒否される複数の Deferred の場合、jQuery.when はすぐにそのマスター Deferred の failCallback を起動します。Deferred の一部は、その時点でまだ解決されていない可能性があることに注意してください。

私がこれを読んだ方法は、func1、func2、および func3 がすべてすぐに起動され、返されたマスター遅延オブジェクトが適切なコールバック関数の呼び出しを処理するということですが、最初の reject() が検出されるたびに、fail() コールバックがすぐに発火。これについての私の理解は正しいですか、それとも私が見逃しているものがありますか?

4

1 に答える 1

1

あなたの理解は正しいです。

コールバックは、すべてのオブジェクトが解決さdoneれたときにのみ呼び出されます。Deferred

一方、コールバックは、渡された他のオブジェクトの状態に関係なく、オブジェクトが拒否さfailれるとすぐに呼び出されます。 DeferredDeferred$.when()

つまり、短絡AND演算子のように機能します。

于 2012-08-27T13:59:41.127 に答える