2016-04-23 2 views
0

Я пробую самую основную вещь - найти пользователя в базе данных и вернуть одно из полей для определенной найденной записи. Я хочу использовать обещания, частично для образовательной цели.Возвращаемое значение обещания в mongoose

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

С кодом, приведенным выше, при условии наличия пользователя с данными, выходная переменная по-прежнему является обещанием. Как я могу получить фактическое значение этого? У меня есть догадка, что моя проблема заключается в том, что оператор return не является async, т. Е. Я возвращаю вывод до его фактического разрешения. Каким будет правильный способ вернуть значение?

ответ

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); 
    }); 
Смежные вопросы