从mongoose findOne promise

时间:2017-03-22 19:17:30

标签: javascript node.js mongodb mongoose

好的,我正在尝试做的是使用mongoose中的findOne()查询从我的mongoDB中检索Google API的用户凭据。我第一次尝试使用回调,但由于它是异步的,它一直在继续,我最终调用了API而没有任何凭据。 然后,我尝试使用mongoose .exec(),然后执行.then()来获取数据,我现在可以,并且所有内容都按照我想要的顺序发生。 问题是我仍然无法从Promise中获取凭据,我需要首先刷新访问令牌,然后返回整个oauth2Client,以便对API进行各种调用。

function createAndUpdateOauth2Client(email) {
    var oauth2Client = new oauth(process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL);
    var credentials = User.findOne({email: email}, function (err, user) {
        console.log("Found user with email: " + user.email);
        console.log("Setting refresh_token to: " + user.googleTokens.refresh_token);
        //return user.googleTokens;
    }).exec();

credentials.then(function (user) {
    oauth2Client.credentials = user.googleTokens;
    console.log("Promise on query was just finished and client is now: ");
    console.log(oauth2Client);
});

var token = oauth2Client.getAccessToken(function (err, token) {
    if(err) {
        console.log(err);
        console.log("There was an error when retrieveing access_token");
        return null;
    } else {
        console.log("setting access_token to: " + token);
        return token;
    }
});

if(token) oauth2Client.credentials.access_token = token;

console.log("returning client: " + oauth2Client.credentials);
    return oauth2Client;

我的问题是,当我调用getAccessToken()函数时,尝试在credentials.then()中设置凭据实际上并没有设置它,因为它仍然未完成。

我想过从credentials.then()里面调用getAccessToken()但最后我仍然需要整个函数来返回带有来自数据库的凭据的ouath2Client和来自getAccessToken()的刷新的access_token。

任何人都有任何关于我如何解决这个问题的提示或技巧?

0 个答案:

没有答案