MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách đặt lệnh gọi lại truy xuất trong mongoose, trong một biến toàn cục

Sai lầm siêu kinh điển dành cho người mới bắt đầu về chủ nghĩa không đồng bộ :)

Chuyện gì đang xảy ra:

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

Bạn nên làm gì:

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

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

Bạn thậm chí không thể khai báo một biến toàn cục, vì đó là một phương pháp không tốt. Vì vậy, bạn không làm ô nhiễm phạm vi toàn cầu của mình.

Chỉnh sửa :Vì bạn hoàn toàn muốn có một biến toàn cục vì lý do nào đó, hãy làm như sau:

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. Cách khuyến nghị để giảm chỉ mục bằng Mongoose là gì?

  2. Không thể ĐĂNG trong nodejs và mongodb trên openshift

  3. Cấu trúc liên kết đã bị phá hủy khi sử dụng MongoDB với trình điều khiển gốc và Express.js

  4. Làm cách nào để tìm các tài liệu tương tự trong MongoDB?

  5. ArrayFilter trong mongoose