16

私の一般的な質問は、リソースが Javascript で確実にクリーンアップ/リリースされるようにするためにどのような手法を使用できるかということです。現在、関数内のリターンまたは例外へのすべての実行パスを検索し、確実にクリーンアップするという C (goto なし) アプローチを採用しています。

私の具体的な例は次のとおりです。Node.jsでは、オブジェクトメンバー関数で(ファイルロックを介して)ミューテックスを使用しています(Node.jsアプリケーションの複数のインスタンスを実行し、異なるインスタンスが相互作用するときに競合状態があるため、相互排除が必要ですファイルシステム)。

たとえば、C++ では次のようにします。

void MyClass::dangerous(void) {
     MyLock lock(&this->mutex);
     ...
     // at the end of this function, lock will be destructed and release this->mutex.
}

私の知る限り、JavaScript は RAII 機能を提供していません。C ではgoto、エラーが発生した場合に s を使用してリソースの割り当てを巻き戻し、関数からのリターン パスが 1 つだけになるようにします。

Javascriptで同様の効果を達成するためのテクニックは何ですか?

4

4 に答える 4

1

スコープの終了時に呼び出されるコールバックのリストを使用します。必要に応じてそれらすべてを呼び出します。

このアプローチは、たとえば、ブラウザー ウィンドウに追加されたハンドラーを初期化解除するために使用されます。初期化解除コードを含むコールバックは、ウィンドウのアンロード イベントで処理されるリストに格納されます。

残念ながら、このアプローチは、例外的な安全要件のため、スコープ管理にはほとんど適していません。

于 2012-07-30T02:37:32.493 に答える