Одна функция вызывает асинхронную функцию, которая затем вызывает другую асинхронную функцию. Однако ведущая функция (первая, не асинхронная) не ожидает метода .then, выполняет код и не ожидает возвращения асинхронных функций
Я пробовал и ждать, и .then, но безрезультатно
Мастер-функция:
validateSession(othersRequests.loginTime, othersRequests.sessionId, othersRequests.emailAddress).then(loginValid => {
console.log('here it equals = ' + loginValid)
if (loginValid == "Y") {
console.log('Yay I am running');
db = {};
querySpec = 'SELECT VALUE COUNT(1) FROM c WHERE c.requester = "Tom"';
queryContainer('requests',querySpec).then(resultString => {
if(resultString != null) {
db = JSON.parse(resultString);
console.log('3: ' + db);
res.writeHead(200,{'content-type':'text/plain'});
res.end('yeah that worked a treat!');
}
}
)
} else {
console.log('session valid value: ' + loginValid);
console.log('User session Expird!');
res.writeHead(403,{'content-type':'text/plain'});
res.end('Session no longer valid');
};
})
Первая асинхронная функция:
async function validateSession(loginTime,sessionId,emailAddress) {
loginValid = "N";
x = getCurrentDate(1).substr(0,5).replace(':','');
loginTime = loginTime.substr(0,5).replace(':','');
x = (x - loginTime) - 40;
if(x > 30) {
console.log('need a session destroy');
loginValid = "N";
return loginValid;
} else {
querySpec = 'SELECT c.emailAddress, c.sessionId FROM c WHERE c.emailAddress = "' + emailAddress + '"';
queryContainer('users',querySpec).then(resultString => {
if(resultString != null) {
db = JSON.parse(resultString);
console.log('db string: ' + db);
if(db.sessionId == sessionId) {
console.log('session valid')
loginValid = "Y";
console.log('loginValid = ' + loginValid);
return loginValid;
} else {
console.log('need a session destroy1');
loginValid = "N";
return loginValid;
}
} else {
loginValid = "N";
return loginValid;
}
});
}
}
В консоли для узла возвращается «здесь равно = неопределено». loginValid - это глобальная переменная, поэтому я удивлен, что она не определена.