MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak ustawić odzyskiwanie wywołania zwrotnego w manguście, w zmiennej globalnej?

Super klasyczny błąd początkującego dotyczący asynchroniczności :)

Co się dzieje :

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 powinieneś zrobić :

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

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

Nawet nie zadeklarowałeś zmiennej globalnej, ponieważ jest to zła praktyka. Jak tylko dane będą dostępne, przekaż je do innej funkcji i zrób coś z nimi. Więc nie zanieczyszczasz swojego globalnego zasięgu.

Edytuj :Ponieważ z jakiegoś powodu absolutnie potrzebujesz zmiennej globalnej, zrób to :

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Połącz projekt java z bazą danych mongodb

  2. mongodb:czy powinienem zawsze używać opcji „bezpieczne” przy aktualizacjach

  3. MongoDb:Korzyści z używania ObjectID w porównaniu z ciągiem zawierającym identyfikator?

  4. Mongodb :projekcja elementów tablicy z findOneAndUpdate nie działa?

  5. findAndModify lub findOneAndUpdate - nie jest funkcją