簡體   English   中英

如何在全局變量中設置mongoose中的檢索回調

[英]How to set retrieve callback in mongoose, in a global variable

我想在全局變量中設置db ,但是當我從findOne函數中獲取控制台name時,我顯示未定義,我該怎么辦?

var name;

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

console.log(name);

謝謝。

關於異步的超級經典初學者錯誤:)

這是怎么回事 :

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!
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM