2016-04-23 51 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); 
    });