たとえば、内部にランダムなコードを持つ2つの関数があり、ユーザーのシステム(低速、中速、高速)に基づいて、2つの関数が完了するまでにかかる時間を知る方法がない場合setTimeout
、完了後にfunction2
のみ発砲しようとする場合は実用的ではありません。 function1
時間の要件が何であれ、両方の関数が100%非jQuery関数であり、内部にjQueryコードがないため、jQueryで完全に監視できないことを考慮して、どのように使用jQuery.deferred
してfunction2
発火させることができますか? function1
せいぜい、関数には.css()
、時間の関連付けがなく、古いコンピューターでは実行速度が遅くなる可能性があるjQueryメソッドが含まれている可能性があります。
次のように呼び出すのと同じように、それfunction2
が同時に実行されていないことを確認するにはどうすればよいですか。function1
function1(); function2();
を使用して$.deferred
?それ以外の回答$.deferred
も大歓迎です!
3月20日追加: function1()がラムダ関数であり、ユーザー入力に応じて、関数に非同期呼び出しがある場合とない場合があり、関数が実行する操作の数を判断できない場合はどうなりますか?これは、次に何が起こるかについての手がかりがない関数ですが、何があっても、ラムダ関数(function1)からのすべてが完了した後にのみ、function2を実行する必要があります。時間がかかりますが、非同期の側面が完了する限り。これはどのように達成できますか?
3月22日追加: つまり、私が求めていることを実行する唯一の方法は、匿名関数をコールバックとして、実行後にコールバックを実行する非同期関数に渡すか、または必要なときに実行するイベントリスナーを作成することだと思います。イベントが最終的にトリガーされます。
アクションの実際の実行を処理するために、前述の関数を含むフレーム内にメカニズム(イベントハンドラー)を手動で構築せずに、2つの別々の行で非同期呼び出しを実行し、それらを順番に起動する方法は実際にはありません。
これらのタイプのメカニズムの良い例は、jQueryの.queue()
メソッドと$.Defferred
オブジェクトです。
.queue()
以下の回答は、 ingと使用に関するjQueryのAPIを読み、$.Deferred
これを明確にするのに役立ちました。
Tgrは、jQueryの$.Deferred
オブジェクトを使用してカスタムチェーン可能関数を作成する方法について以下の優れた例を示しました。カスタム関数自体には、必ずしもjQueryコードが含まれている必要はありません。これは、まさに私が探していたものです。