好的,我正在尝试做的是使用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。
任何人都有任何关于我如何解决这个问题的提示或技巧?