2016-04-23 49 views
0

我在嘗試一個非常基本的事情 - 在數據庫中找到一個用戶並返回某個特定找到記錄的字段之一。我想使用承諾,部分用於教育目的。在貓鼬中返回一個承諾的價值

var username = "user1" // assuming this exists: User({username: "user1", city: "London"}) 

function getUser(username) { 
    var promise = User.findOne({username: username}).exec(); 

    var output = promise.then(function(user) { 
     return user.city; 
    }).catch(function(err) { 
     console.log(err); 
    }); 
    return output; 
} 

用上面給出的代碼,假設有一個用戶給定的數據,輸出變量仍然是一個承諾。我怎樣才能得到它的實際價值?我有一個預感,我的問題是與返回語句不是異步,即我實際上解決之前返回輸出。什麼是返回值的正確方法?

回答

2

您返回的承諾,來獲取值時承諾解決您應該對返回的承諾撥打then

function getUser(username) { 
    return User 
     .findOne({username: username}) 
     .then(function(user) { 
      return user.city; 
     }) 
     .catch(function(err) { 
      console.log(err); 
     }); 
} 

// How to use getUser 
getUser('John') 
    .then(function(city) { 
     console.log(city); 
    });