"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Qu'est-ce que le modèle Promise Disposer et comment fonctionne-t-il ?

Qu'est-ce que le modèle Promise Disposer et comment fonctionne-t-il ?

Publié le 2024-11-09
Parcourir:798

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

Comprendre le modèle de broyeur de promesses

Vous avez rencontré le modèle de broyeur de promesses dans votre code, mais son objectif reste insaisissable. Cet article vise à clarifier le concept et à démontrer son application.

Présentation du problème

Dans votre extrait de code :

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

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

Vous êtes confronté au problème de fuites potentielles de ressources si vous négligez de libérer la connexion à la base de données après chaque appel getDb. Cela peut entraîner le gel du système si les limites de ressources sont dépassées.

Présentation du modèle Disposer

Le modèle de broyeur de promesses établit un lien fort entre une portée de code et la ressource qu'il contient. possède. En liant la ressource à la portée, vous garantissez sa libération rapide une fois la portée terminée, éliminant ainsi le risque de surveillance. Ce modèle présente des similitudes avec l'utilisation de C#, Python avec, le try-with-resource de Java et le RAII de C.

Structure du modèle

Le modèle du broyeur suit un modèle spécifique structure :

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

L'appliquer à votre code

En refactorisant votre code dans le modèle Disposer :

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

Vous pouvez maintenant réécrire votre code précédent comme :

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

Assurez-vous que la ressource est libérée dans le bloc final pour garantir une élimination appropriée.

Exemples concrets

Exemples notables de Le modèle de broyeur inclut en pratique Sequelize et Knex (le générateur de requêtes de Bookshelf). Ses applications s'étendent à la gestion de processus asynchrones complexes, tels que l'affichage et le masquage d'indicateurs de chargement basés sur l'achèvement de plusieurs requêtes AJAX.

Déclaration de sortie Cet article est reproduit sur: 1729234278 S'il y a une contrefaçon, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3