Node.js игнорирует .then (variable => { - PullRequest
0 голосов
/ 02 января 2019

Одна функция вызывает асинхронную функцию, которая затем вызывает другую асинхронную функцию. Однако ведущая функция (первая, не асинхронная) не ожидает метода .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 - это глобальная переменная, поэтому я удивлен, что она не определена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...