Saltar al contenido

Mongoose – ¿Qué hace la función exec?

Si te encuentras con algo que no comprendes puedes dejarlo en los comentarios y trataremos de ayudarte lo más rápido posible.

Solución:

Básicamente, cuando se usa mangosta, los documentos se pueden recuperar usando ayudantes. Todo método modelo que acepte condiciones de consulta puede ejecutarse mediante un callback o la exec método.

callback:

User.findOne( name: 'daniel' , function (err, user) 
  //
);

exec:

User
  .findOne( name: 'daniel' )
  .exec(function (err, user) 
      //
  );

Por lo tanto, cuando no pasa una devolución de llamada, puede crear una consulta y, finalmente, ejecutarla.

Puede encontrar información adicional en los documentos de mongoose.

ACTUALIZAR

Algo a tener en cuenta al usar Promises en combinación con las operaciones asíncronas de Mongoose es que las consultas de Mongoose son no promesas Las consultas devuelven un entonces capazpero si necesitas un verdadero Prométeme que debes usar el exec método. Puede encontrar más información aquí.

Durante la actualización noté que no respondí explícitamente la pregunta:

¿Nunca antes había visto ese método en Javascript? ¿Qué hace exactamente?

Bueno es no un método de JavaScript nativo, pero parte de la API de Mongoose.

Daniel ha respondido esto muy bien. Para elaborar una lista exhaustiva de formas de crear y ejecutar consultas, observe los siguientes casos de uso:

Construcción de consultas

Mongoose no ejecutará una consulta hasta que then o exec se le ha llamado. Esto es muy útil cuando se construyen consultas complejas. Algunos ejemplos pueden incluir el uso de populate y aggregate funciones

User.find(name: 'John') // Will not execute

Ejecución a través de devolución de llamada

Aunque a muchos no les gusta debido a su naturaleza de anidamiento, las consultas se pueden ejecutar proporcionando la devolución de llamada opcional.

User.find(name: 'John', (err, res) => ) // Will execute

Entonces API como Promises/A+

Las consultas de Mongoose proporcionan una then función. Esto no debe confundirse con las promesas regulares. En pocas palabras, la especificación Promises/A+ requiere un then funcione de manera muy parecida a como estamos acostumbrados con las promesas.

User.find(name: 'John').then(); // Will execute
Promise.all([User.find(name: 'John'), User.find(name: 'Bob')]) // Will execute all queries in parallel

La función ejecutiva

De los documentos de Mongoose If you need a fully-fledged promise, use the .exec() function.

User.find(name: 'John').exec(); // Will execute returning a promise

exec() devolverá una promesa si no se proporciona una devolución de llamada. Entonces, el siguiente patrón es muy conveniente y genérico: puede manejar devoluciones de llamada o promesas muy bien:

function findAll(query, populate, cb) 

  let q = Response.find(query);

  if (populate && populate.length > 0) 
    q = q.populate(populate);
  

  // cb is optional, will return promise if cb == null
  return q.lean().exec(cb);


Recomiendo usar las promesas de Bluebird con Mongoose, para hacer eso, usa esta llamada:

const mongoose = require('mongoose');
mongoose.Promise = require('bluebird');

Al final de todo puedes encontrar las notas de otros programadores, tú además eres capaz dejar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *