1. ホーム
  2. javascript

[解決済み] JavaScriptでロックを実装する方法

2023-01-04 04:26:47

質問

に相当するものはどのようにすればよいのでしょうか? lock に相当するものをJavaScriptで実装することはできますか?

そこで、私が考えていることを説明するために簡単なユースケースを紹介します。

ユーザーがボタンをクリックする B . B はonclickイベントを発生させます。 もし B の中にある場合 event-state を待っている間、イベントは B にあることを待ちます。 ready-state の中にあることを確認します。 もし Bready-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ソリューションを使って実装することもできます。