sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan indstiller du hente tilbagekald i mongoose, i en global variabel

Super klassisk begynderfejl om asynkronisme :)

Hvad sker der :

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

Hvad du skal gøre :

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

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

Du burde ikke engang deklarere en global variabel, da det er en dårlig praksis. Så snart dataene er tilgængelige, skal du videregive dem til en anden funktion og gøre noget med dem. Så du forurener ikke dit globale omfang.

Rediger :Da du absolut ønsker en global variabel af en eller anden grund, så gør dette :

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!
}
 



  1. Mongodb Aggregation rammegruppe og sortering

  2. Mangust udvalgte felter (indlejrede)

  3. MongoDB updateOne()

  4. elegant liste over gentagne underpunkter