„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Was ist das Promise-Disposer-Muster und wie funktioniert es?

Was ist das Promise-Disposer-Muster und wie funktioniert es?

Veröffentlicht am 09.11.2024
Durchsuche:921

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

Verstehen des Promise-Disposer-Musters

Sie sind in Ihrem Code auf das Promise-Disposer-Muster gestoßen, dessen Zweck jedoch noch unklar ist. Dieser Artikel soll das Konzept verdeutlichen und seine Anwendung demonstrieren.

Problemübersicht

In Ihrem Code-Snippet:

function getDb() {
  return myDbDriver.getConnection();
}

var users = getDb().then(function (conn) {
  return conn.query("SELECT name FROM users").finally(function (users) {
    conn.release();
  });
});

Sie stehen vor dem Problem potenzieller Ressourcenlecks, wenn Sie es versäumen, die Datenbankverbindung nach jedem getDb-Aufruf freizugeben. Dies kann zum Einfrieren des Systems führen, wenn die Ressourcengrenzen überschritten werden.

Einführung in das Disposer-Muster

Das Promise-Disposer-Muster stellt eine starke Verbindung zwischen einem Codebereich und der darin enthaltenen Ressource her besitzt. Indem Sie die Ressource an den Umfang binden, stellen Sie sicher, dass sie nach Abschluss des Umfangs umgehend freigegeben wird, und eliminieren so das Risiko einer Versehen. Dieses Muster weist Ähnlichkeiten mit C#s using, Pythons with, Javas try-with-resource und Cs RAII auf.

Musterstruktur

Das Disposer-Muster folgt einem bestimmten Struktur:

withResource(function (resource) {
  return fnThatDoesWorkWithResource(resource); // returns a promise
}).then(function (result) {
  // resource disposed here
});

Anwenden auf Ihren Code

Durch Umgestaltung Ihres Codes in das Disposer-Muster:

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();
  });
}

Sie können Ihren vorherigen Code jetzt wie folgt umschreiben:

withDb(function (conn) {
  return conn.query("SELECT name FROM users");
}).then(function (users) {
  // connection released here
});

Stellen Sie sicher, dass die Ressource innerhalb des „finally“-Blocks freigegeben wird, um eine ordnungsgemäße Entsorgung zu gewährleisten.

Beispiele aus der Praxis

Bemerkenswerte Beispiele dafür Zu den Entsorgermustern in der Praxis gehören Sequelize und Knex (Bookshelfs Abfrage-Builder). Seine Anwendungen erstrecken sich auf die Verwaltung komplexer asynchroner Prozesse, wie etwa das Ein- und Ausblenden von Ladeindikatoren basierend auf dem Abschluss mehrerer AJAX-Anfragen.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729234278 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3