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.
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