MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment définir le rappel de récupération dans la mangouste, dans une variable globale

Erreur de débutant super classique sur l'asynchronisme :)

Que se passe-t-il :

var name; // FIRST you declare the name variable

schema.findone({name : 'Bob'} , function(er , db){ // SECOND you launch a request to the DB
  name = db; // FOURTH name is populated.
  console.log(db);
});

console.log(name); // !! THIRD !! you log name - it's empty

Ce que vous devez faire :

schema.findone({name : 'Bob'} , function(er , db){
  doSomethingElse(db);
});

function doSomethingElse(name){
    console.log(name); // It's defined.
}

Vous ne devriez même pas déclarer une variable globale, car c'est une mauvaise pratique. Dès que les données sont disponibles, passez-les à une autre fonction et faites quelque chose avec. Vous ne polluez donc pas votre périmètre global.

Modifier :Puisque vous voulez absolument une variable globale pour une raison quelconque, faites ceci :

var name;

schema.findone({name : 'Bob'} , function(er , db){
  name = db;
  console.log(name); // works fine
  doSomethingElse();
});

console.log(name); // name is empty here, because the DB request is still in progress at this stage

function doSomethingElse(){
    console.log(name); // Tadaaaa! It's a global variable and is defined!
}