Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 猫鼬中承诺的返回值_Node.js_Mongodb_Promise - Fatal编程技术网

Node.js 猫鼬中承诺的返回值

Node.js 猫鼬中承诺的返回值,node.js,mongodb,promise,Node.js,Mongodb,Promise,我正在尝试一件非常基本的事情——在数据库中找到一个用户,并为找到的特定记录返回一个字段。我想用承诺,部分是为了教育目的 var username = "user1" // assuming this exists: User({username: "user1", city: "London"}) function getUser(username) { var promise = User.findOne({username: username}).exec(); var

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

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语句不是异步的,也就是说,我在实际解决之前返回输出。返回值的正确方法是什么?

您返回承诺,要在承诺得到解决时获取值,您应该调用
,然后对返回的承诺调用

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

您返回承诺,要在承诺得到解决时获取值,您应该调用
,然后对返回的承诺调用

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