Estoy tratando de hacer algo como esto

    function retrieveUser(uname) {
      var user = User.find({uname: uname}, function(err, users) {
        if(err)
          console.log(err);
          return null;
        else
          return users[0];
      return user;

Pero esto devuelve un documento en lugar de un objeto de usuario. El parámetro de los usuarios es un array de objetos de usuario que coincidan con la consulta, así que ¿cómo iba yo a la tienda de uno de los objetos en una variable que mi función no se puede devolver?

InformationsquelleAutor mao3 | 2013-09-21

3 Comentarios

  1. 17

    La función User.find() es una función asíncrona, por lo que no se puede utilizar un valor de retorno para obtener un valor resultante. En su lugar, utilice una devolución de llamada:

    function retrieveUser(uname, callback) {
      User.find({uname: uname}, function(err, users) {
        if (err) {
          callback(err, null);
        } else {
          callback(null, users[0]);
        }
      });
    };

    La función sería luego utilizada como este:

    retrieveUser(uname, function(err, user) {
      if (err) {
        console.log(err);
      }
    
      //do something with user
    });
  2. 3

    Yo estaba buscando una respuesta para la misma pregunta.

    Esperemos que, MongooseJS ha publicado v5.1.4 a partir de ahora.

    Model.find({property: value}).exec() devuelve una promesa.

    va a resolver a un objeto si se usa de la siguiente manera:

    const findObject = (value) => {
      return Model.find({property: value}).exec();
    }
    
    mainFunction = async => {
         const object = await findObject(value);
         console.log(object); //or anything else as per your wish
    }
  3. 0

    Básicamente, MongoDB y NodeJS han asincrónica funciones por lo que tenemos que hacer es sincrónico funciones, a continuación, después de que funciona correctamente como se esperaba.

    router.get('/', async function(req, res, next) {
    
      var users = new mdl_users();
          var userData = []; //Created Empty Array
          await mdl_users.find({}, function(err, data) {
            data.forEach(function(value) {
              userData.push(value);
            });
          });
      res.send(userData);
    
    });

    En el Ejemplo, mdl_users es la mangosta modelo y tengo una colección de usuario(tabla) para los datos del usuario en la base de datos MongoDB y que los datos de almacenamiento en la «userData» variable para que se muestre.En esta función que he dividido todos los documentos(filas de la tabla) por la función si sólo desea todo el registro, a continuación, el uso directo de encontrar() como el código siguiente.

    router.get('/', async function(req, res, next) {
    
      var users = new mdl_users();
      var userData = await mdl_users.find();
      res.send(userData);
    
    });

Dejar respuesta

Please enter your comment!
Please enter your name here