"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Qué es el patrón de eliminación de promesas y cómo funciona?

¿Qué es el patrón de eliminación de promesas y cómo funciona?

Publicado el 2024-11-09
Navegar:800

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

Comprensión del patrón de eliminación de promesas

Ha encontrado el patrón de eliminación de promesas en su código, pero su propósito sigue siendo difícil de alcanzar. Este artículo tiene como objetivo aclarar el concepto y demostrar su aplicación.

Resumen del problema

En su fragmento de código:

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

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

Se enfrenta al problema de posibles fugas de recursos si no libera la conexión de la base de datos después de cada llamada a getDb. Esto puede llevar a la congelación del sistema si se exceden los límites de recursos.

Presentación del patrón de eliminación

El patrón de eliminación de promesa establece una fuerte conexión entre el alcance del código y el recurso que posee. Al vincular el recurso al alcance, se garantiza su pronta liberación cuando finaliza el alcance, lo que elimina el riesgo de supervisión. Este patrón tiene similitudes con el uso de C#, Python con, try-with-resource de Java y RAII de C.

Estructura del patrón

El patrón del eliminador sigue un patrón específico estructura:

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

Aplicándolo a su código

Al refactorizar su código en el patrón del eliminador:

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

Ahora puedes reescribir tu código anterior como:

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

Asegúrese de que el recurso se libere dentro del bloque finalmente para garantizar la eliminación adecuada.

Ejemplos del mundo real

Ejemplos notables de El patrón de eliminación en la práctica incluye Sequelize y Knex (el generador de consultas de Bookshelf). Sus aplicaciones se extienden a la gestión de procesos asincrónicos complejos, como mostrar y ocultar indicadores de carga basados ​​en la finalización de múltiples solicitudes AJAX.

Declaración de liberación Este artículo se reimprime en: 1729234278 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3