sql >> Databáze >  >> NoSQL >> MongoDB

Jak nastavit zpětné volání načtení v mongoose v globální proměnné

Super klasická začátečnická chyba o asynchronismu :)

Co se děje :

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

Co byste měli udělat:

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

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

Neměli byste ani deklarovat globální proměnnou, protože je to špatný postup. Jakmile budou data k dispozici, předejte je jiné funkci a něco s nimi udělejte. Takže neznečistíte svůj globální rozsah.

Upravit :Protože z nějakého důvodu absolutně chcete globální proměnnou, udělejte toto:

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. Získání mongoStat prostřednictvím ovladače mongoDB Java

  2. Načtěte pouze dotazovaný prvek v poli objektů v kolekci MongoDB

  3. MongoDB $isoWeekYear

  4. Třída 'MongoDB\Client' nebyla nalezena, je nainstalováno rozšíření mongodb