Promise Disposer パターンを理解する
指定されたコードでは、関数 getDb() はデータベース接続を表す Promise を返します。 Promise は非同期操作を処理するためによく使用されますが、取得したリソースが適切に解放されないと、リソース リークが発生する可能性があります。
ディスポーザ パターン
Promise ディスポーザパターンは、スコープをリソースに関連付けることによってこの問題に対処します。スコープが終了すると、リソースは自動的に解放されます。他のプログラミング言語では、このパターンは「try-with-resource」または「RAII」として知られています。
パターンの適用
この場合、 withDb() 関数は、コールバックを受け入れてデータベース接続で作業を実行します。コールバック内で、クエリを実行したり、その他の操作を実行したりできます。 withDb() 関数は、コールバックの完了時に接続が確実に解放されるようにします。
コード例
次のコードは、元の例に適用されるディスポーザー パターンを示しています。
function withDb(work) { var db; return myDbDriver.getConnection().then(function(connection) { db = connection; // Keep reference to release later return work(db); // Perform work on database }).finally(function() { if (db) db.release(); // Release the connection }); } withDb(function(conn) { return conn.query("SELECT name FROM users"); }).then(function(users) { // Connection released here });
ディスポーザー パターンを使用することにより、コールバックが正常に実行されたかエラーが発生したかに関係なく、データベース接続が常に解放されるようになります。これにより、リソースのリークを防ぎ、適切なリソース管理を確保できます。
以上がPromise ディスポーザー パターンは非同期操作でのリソース リークをどのように防ぐのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。