MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да настроя извличане на обратно извикване в mongoose, в глобална променлива

Супер класическа грешка за начинаещи относно асинхронизма :)

Какво се случва :

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

Какво трябва да направите:

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

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

Не трябва дори да декларирате глобална променлива, тъй като това е лоша практика. Веднага след като данните са налични, предайте ги на друга функция и направете нещо с тях. Така че не замърсявате глобалния си обхват.

Редактиране :Тъй като абсолютно искате глобална променлива по някаква причина, тогава направете това :

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. Как да сравним MongoDB с YCSB?

  2. Отношения на MongoDB:вграждане или справка?

  3. Как да хванете грешката при вмъкване на MongoDB документ, който нарушава уникален индекс?

  4. Комбиниране на оператори $regex и $or в Mongo

  5. Node.js + Mongoose работи локално, но не и на Heroku