猫鼬承诺的返回值

Dmi*_*nov 0 mongodb node.js promise

我正在尝试一件非常基本的事情 - 在数据库中查找用户并返回特定找到记录的字段之一。我想使用承诺,部分是出于教育目的。

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;
}
Run Code Online (Sandbox Code Playgroud)

根据上面给出的代码,假设有一个用户拥有给定的数据,则输出变量仍然是一个承诺。我怎样才能得到它的实际价值?我有预感,我的问题是 return 语句不是异步的,即我在实际解决之前返回输出。返回值的正确方法是什么?

ale*_*mac 5

您返回承诺,要在承诺解决时获取值,您应该调用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);
    });
Run Code Online (Sandbox Code Playgroud)