MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Cara mengatur ambil panggilan balik di luwak, dalam variabel global

Kesalahan pemula super klasik tentang asinkronisme :)

Apa yang terjadi :

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

Yang harus kamu lakukan :

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

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

Anda bahkan tidak dapat mendeklarasikan variabel global, karena ini adalah praktik yang buruk. Segera setelah data tersedia, teruskan ke fungsi lain dan lakukan sesuatu dengannya. Jadi Anda tidak mencemari ruang lingkup global Anda.

Sunting :Karena Anda benar-benar menginginkan variabel global untuk beberapa alasan, lakukan ini :

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. Implementasi Pemberian Tag Sederhana dengan MongoDB

  2. Bagaimana cara mengubah struktur objek JSON menjadi notasi titik?

  3. Pembuatan indeks besar MongoDB sangat lambat

  4. Apa cara yang baik untuk mendapatkan detail pengguna saat ini dalam model?

  5. Agregasi MongoDB untuk menambahkan bulan yang hilang antara dua tanggal setelah pengelompokan pada bidang tanggal