ホームページ > ウェブフロントエンド > jsチュートリアル > Promise Disposer パターンとは何ですか?またその仕組みは何ですか?

Promise Disposer パターンとは何ですか?またその仕組みは何ですか?

Susan Sarandon
リリース: 2024-10-18 14:52:02
オリジナル
390 人が閲覧しました

What is the Promise Disposer Pattern and How Does it Work?

Promise Disposer パターンを理解する

コード内で Promise Disposer パターンに遭遇しましたが、その目的は依然としてわかりません。この記事は、概念を明確にし、その応用例を示すことを目的としています。

問題の概要

コード スニペット内:

<code class="javascript">function getDb() {
  return myDbDriver.getConnection();
}

var users = getDb().then(function (conn) {
  return conn.query("SELECT name FROM users").finally(function (users) {
    conn.release();
  });
});</code>
ログイン後にコピー

あなたは問題に直面しています。 getDb 呼び出しのたびにデータベース接続を解放しなかった場合に発生する可能性のあるリソース リークの数を減らします。これにより、リソース制限を超えるとシステムがフリーズする可能性があります。

ディスポーザ パターンの紹介

Promise ディスポーザ パターンは、コード スコープとコード スコープとリソースの間に強力な接続を確立します。所有しています。リソースをスコープにバインドすると、スコープが終了したときにリソースが即座に解放され、見落としのリスクが排除されます。このパターンは、C# の using、Python の with、Java の try-with-resource、および C の RAII と類似しています。

パターン構造

ディスポーザ パターンは特定のパターンに従います。構造:

<code class="javascript">withResource(function (resource) {
  return fnThatDoesWorkWithResource(resource); // returns a promise
}).then(function (result) {
  // resource disposed here
});</code>
ログイン後にコピー

コードへの適用

コードをディスポーザ パターンにリファクタリングすることで、

<code class="javascript">function withDb(work) {
  var _db;
  return myDbDriver.getConnection().then(function (db) {
    _db = db; // keep reference
    return work(db); // perform work on db
  }).finally(function () {
    if (_db) _db.release();
  });
}</code>
ログイン後にコピー

書き換えられるようになりました前のコードは次のとおりです。

<code class="javascript">withDb(function (conn) {
  return conn.query("SELECT name FROM users");
}).then(function (users) {
  // connection released here
});</code>
ログイン後にコピー

適切な破棄を保証するために、リソースがfinally ブロック内で解放されていることを確認してください。

実際の例

実際のディスポーザー パターンの注目すべき例には、Sequelize と Knex (Bookshelf のクエリ ビルダー) が含まれます。そのアプリケーションは、複数の AJAX リクエストの完了に基づいて読み込みインジケーターの表示と非表示を切り替えるなど、複雑な非同期プロセスの管理まで拡張されます。

以上がPromise Disposer パターンとは何ですか?またその仕組みは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート