sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man ställer in återuppringning i mongoose, i en global variabel

Superklassiskt nybörjarmisstag om asynkronism :)

Vad händer :

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

Vad du bör göra :

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

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

Du skulle inte ens deklarera en global variabel, eftersom det är en dålig praxis. Så snart data är tillgänglig, skicka den till en annan funktion och gör något med den. Så du förorenar inte din globala räckvidd.

Redigera :Eftersom du absolut vill ha en global variabel av någon anledning, gör du så här :

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. kan du inte uppdatera egenskapen createAt i mongoose?

  2. Hur man utvecklar applikationer för MongoDB och Redpanda med Docker Compose

  3. Mongodb samlar tre samlingar

  4. MongoDB $concat