問題タブ [synchronous]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asynchronous - 非同期 vs 同期メッセージ
非同期メッセージングと同期メッセージング (java) の違いは何ですか。また、メッセージングの送信者/受信者が実装される方法にどのように影響しますか。J2EE アーキテクチャはどのようにどちらを選択するかを決定します。
javascript - Ajaxjquery同期コールバックの成功
私はajax呼び出しを行うこの関数を持っています。コードコメントの最後のチャンクで問題を説明しています。
コードコメントに記載されている問題に基づいて、この状況に最適な変更は何ですか?
jquery - JQuery 同期アニメーション
多くの場合、アニメーションを同期的に実行したいと考えています。特に一連のシーケンシャル アニメーションを作成したい場合。
animate
jQuery関数呼び出しを同期させる簡単な方法はありますか?
私が考えた唯一の方法は、アニメーションが終了したときにフラグを true に設定し、このフラグを待つことです。
c - ファイルが Win32 で読み取り可能になるまで待機しています
ReadDirectoryChangesW
同期的に呼び出してディレクトリを監視しています。新しいファイルが利用可能になると、 と を使用CreateFile
してすぐにアクセスしようとしますが、これにより. 監視対象のディレクトリにファイルを配置するプロセスは、ファイルを読み取ろうとするまでに書き込みを終了しません。GENERIC_READ
FILE_SHARE_READ
ERROR_SHARING_VIOLATION
ファイルが読み取り可能になるまで確実に待機する方法はありますか? メソッドを以下のようなループに入れることができますが、もっと良い方法があることを願っています。
jquery - jquery同期関数
別の関数が完了した後に関数を実行する方法はありますか? 例えば:
doSomething が完了した後に doSomethingElse() を実行したいだけです。これは可能ですか?
jquery - jQuery を使用してイベント トリガーとそれらにバインドされたメソッドを同期的に実行するにはどうすればよいですか?
以下の関数は、ページの準備ができたときに呼び出され、さまざまなアンカー リンクのクリックを模倣し、それらのアンカーのバインドされたメソッドをトリガーして、同じリンクを手動でクリックすることで構成される同じ DOM を再現するように設計されています。
2 つのイベント トリガーのうち、最初のイベント トリガーは、バインドされたメソッドを正常に実行します。ただし、2 番目のイベント トリガーのターゲット アンカーは、最初のイベントのメソッドが完了するまで存在しません。これは、2 番目のイベントのターゲット アンカーが DOM に挿入されるためです。2 番目のトリガーは失敗します。私の唯一の推測では、これはターゲット アンカーを見つけることができないためであり、2 番目のトリガーが呼び出された時点で最初のトリガーが完全に完了していないことを示唆しています。私はこれが事実だとは思わなかったでしょう-または私のコードはどういうわけか複数のスレッドで実行されていますか?
要するに、トリガーとそのメソッドが完全に同期して実行されていることを誰かに確認してもらう必要があるため、間違った場所でバグを探しているかどうかがわかります。よろしくお願いします。
javascript - 同期 XmlHttpRequest のシミュレート
他の関連する質問をいくつか読みました (非同期 JavaScript 関数をラップして同期させるためのパターン& JavaScript で非同期イベントを同期させる &もっとあるかもしれません) が、すべての可能性を確実に使い果たしたいだけです。
setInterval または setTimeout を使用して、非同期の XmlHttpRequest を準同期の XmlHttpRequest に「変換」することは可能でしょうか?
Ajax リクエストが成功すると変数が設定され、これが while ループ (setInterval または setTimeout のいずれか、および必要に応じてコールバック関数を呼び出した) が終了するためのシグナルとなります。または、setInterval および/または setTimeout の機能 (または制限) を根本的に誤解していますか?
javascript - Javascript の順次実行を強制する方法は?
クラス、イベント ハンドラー、およびコールバックを含むかなり複雑な回答しか見つかりませんでした (これは、やや大ハンマーのアプローチのように思えます)。コールバックは役に立つかもしれないと思いますが、最も単純なコンテキストではこれらを適用できないようです。次の例を参照してください。
この場合、2 番目の関数は最初の関数の前に完了します。最初の関数が完了するまで 2 番目の関数の実行を強制的に遅らせる最も簡単な方法 (または 1 つある?) は何ですか?
- -編集 - -
これはくだらない例でしたが、David Hedlund のおかげで、この新しい例で実際に同期していることがわかります (テスト プロセスでブラウザがクラッシュしました!):
私の実際の問題はjQueryとIEにあったので、自分でどこにも行けない場合は、それについて別の質問を投稿する必要があります!
multithreading - スレッド同期キューの最適なアプローチ
さまざまなスレッドをキューに入れることができるキューがあるので、次の2つのことを保証できます。
- リクエストは1つずつ処理されます。
- リクエストは到着順に処理されます
2点目は重要です。それ以外の場合は、単純なクリティカルセクションで十分です。私にはさまざまなリクエストのグループがあり、単一のグループ内でのみこれらのポイントを満たさなければなりません。異なるグループからのリクエストは同時に実行できます。
次のようになります。
編集:解決したい問題が隠されているため、実際の実装を削除しました
これが必要なのは、httpリクエストを受け入れるIndyベースのWebサーバーがあるからです。まず、リクエストに対応するセッションを見つけます。次に、そのセッションに対して要求(コード)が実行されます。同じセッションに対して複数のリクエストを取得でき(最初のリクエストがまだ処理されている間に新しいリクエストを取得できることを読んでください)、それらは到着の正しい順序で1つずつ実行する必要があります。そのため、このような状況で使用できる汎用同期キューを探して、リクエストをキューに入れることができるようにします。私はスレッドを制御できず、各リクエストは異なるスレッドで実行される可能性があります。
この種の問題に対する最良の(通常の)アプローチは何ですか?問題は、正しい順序が維持されるように、エンキューとデキューはアトミック操作でなければならないことです。私の現在の実装にはかなりのボトルネックがありますが、機能します。
編集:以下はアトミックエンキュー/デキュー操作の問題です
あなたは通常このようなことをします:
ここでの問題は、これがアトミックではないということです。1つのスレッドがすでにキューにあり、別のスレッドが来てEnqueueを呼び出す場合、2番目のスレッドがクリティカルセクションを離れて自分自身をブロックしようとする可能性があります。これで、スレッドスケジューラは最初のスレッドを再開し、次の(2番目の)スレッドのブロックを解除しようとします。ただし、2番目のスレッドはまだブロックされていないため、何も起こりません。これで、2番目のスレッドが続行され、それ自体がブロックされますが、ブロックが解除されないため、これは正しくありません。ブロッキングがクリティカルセクション内にある場合、そのクリティカルセクションが離れることはなく、デッドロックが発生します。
jquery - 文字列を返すjqueryを介した同期ajax呼び出し
戻り値の型を「json」に設定して、ajax への jQuery 同期呼び出しを行っていますが、戻りデータは文字列として返されます。私が間違っていることはありますか、それとも文字列をオブジェクトに変換する方法はありますか?
デバッガーで結果を確認できるように、ajax 呼び出しは機能しています。返されたデータが文字列になっているだけです。