[解決済み] JavaScriptでロックを実装する方法
質問
に相当するものはどのようにすればよいのでしょうか?
lock
に相当するものをJavaScriptで実装することはできますか?
そこで、私が考えていることを説明するために簡単なユースケースを紹介します。
ユーザーがボタンをクリックする
B
.
B
はonclickイベントを発生させます。 もし
B
の中にある場合
event-state
を待っている間、イベントは
B
にあることを待ちます。
ready-state
の中にあることを確認します。 もし
B
が
ready-state
,
B
はロックされており
event-state
に設定されると、イベントは伝搬する。 イベントの伝播が完了すると
B
に設定されます。
ready-state
.
これに近いことができるのは、単にクラスを追加したり削除したりするだけでよいことがわかりました。
ready-state
をボタンに追加したり削除したりするだけで、これに近いことができることがわかりました。 しかし、問題は、変数が設定されるよりも速く、ユーザーがボタンを 2 回連続でクリックできることです。したがって、ロックに関するこの試みは、いくつかの状況で失敗します。
JavaScriptで失敗しないロックを実装する方法をご存知の方はいらっしゃいますか?
どのように解決するのですか?
スレッドレスで並行性保護を必要としないことを意図しているJSにおいて、Lockは疑問の残るアイデアです。あなたは、遅延実行で呼び出しを結合することを求めています。このために私が従うパターンは、コールバックを使用することです。このようなものです。
var functionLock = false;
var functionCallbacks = [];
var lockingFunction = function (callback) {
if (functionLock) {
functionCallbacks.push(callback);
} else {
$.longRunning(function(response) {
while(functionCallbacks.length){
var thisCallback = functionCallbacks.pop();
thisCallback(response);
}
});
}
}
DOMイベントリスナーやpubsubソリューションを使って実装することもできます。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptはシングルスレッドであることが保証されていますか?
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] JavaScript で css プロパティを使用して HTML 要素の背景色を設定する方法