厳密モードを使用しています。同じ関数への 2 つの呼び出しが同じ実行コンテキスト スタックで行われたかどうかを比較したい。
例 1: 2 つの独立したイベント ハンドラー A と B が起動し、それぞれが C を呼び出した場合、C への呼び出しが異なる実行コンテキスト スタックで行われたことを知りたい。
A->C
B->C
例 2: 関数 A が C を呼び出し、B を呼び出し、B が再び C を呼び出した場合、C への 2 つの呼び出しが同じ実行コンテキスト スタックで行われたことを確認したいと思います。
A->C->B->C
私は Javascript でアプリケーション トランザクションを実装しており、ネストされたトランザクションをサポートできるようにしたいので、この動作が必要です。厳密なコードを書いているので、引数、呼び出し先、呼び出し元オブジェクトを使用しないソリューションを探しています。
また、A、B、C はすべて非同期である可能性があり、C は呼び出し時にすぐに完了まで実行されないことに注意してください。これが、以下で説明するカウンターの使用が非同期シナリオで機能しない理由です。
C() {
return Promise.resolve().then(() => {
let result = someFunction();
return result;
})
}
B() {
doSomethingSync();
if(someCondition) {
C();
}
}
C は非同期です。カウンターを使用すると、2 つの独立したイベント ハンドラーが C を呼び出し、どちらかがカウンターをデクリメントする機会を得る前に、どちらもカウンターをインクリメントすることを意味します。