Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

438
Views
¿Cuál es el patrón de eliminador de promesas?

He leído sobre el patrón de eliminador de promesas en varios lugares, pero no puedo entender qué es. Me sugirieron que lo usara en un código que se ve así:

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

¿Cuál es el patrón de eliminador de promesas y cómo se aplica aquí?


Nota: en las promesas nativas, .finally como "agregar controladores de rechazo y cumplimiento que devuelvan el valor pero realicen una acción". Estoy usando bluebird en este caso si importa.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El problema con tu código

El problema con el enfoque anterior es que si olvida liberar la conexión después de cada vez que ejecuta getDb , tiene una fuga de recursos que podría congelar su aplicación eventualmente cuando se quede sin el recurso que está filtrando.

Usted podría, en un lugar hacer:

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

Lo que filtrará una conexión de base de datos que nunca se cerró.


El patrón del triturador

El patrón de eliminación es una forma de acoplar un ámbito de código con la propiedad del recurso. Al vincular el recurso a un ámbito, nos aseguramos de que siempre se libere cuando hayamos terminado y no podamos olvidarnos fácilmente de liberarlo. Es similar al using en C#, with Python y Try-with-Resource en Java, así como RAII en C++.

Parece que:

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

Aplicándolo aquí

Si escribimos nuestro código como:

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

Podríamos escribir nuestro código anterior como:

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

Ejemplos de usuarios del patrón disposer son sequelize y knex (constructor de consultas de estantería). También es posible usarlo para cosas más simples, como ocultar un cargador cuando se completaron todas las solicitudes de AJAX, por ejemplo.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!