Глобальная переменная не работает внутри переключателя - JavaScript - PullRequest
0 голосов
/ 27 сентября 2018
 let visitor;
 const role = req.user.profile;

 // role will be either Admin or Manager

 switch (role) {
   case 'Admin':
     if (req.body.verificationMode === 'online') {
       visitor = {
         name: req.body.name,
         mode: 'online',
       };
     } else {
       visitor = {
         name: req.body.name,
         mode: 'offline'
       };
     }
     break;


   case 'Manager':
     Staff.findOne({
       where: {
         loginId: req.user.id,
       },
     }).then((staffData) => {
       if (req.body.verificationMode === 'online') {
         visitor = {
           name: req.body.name,
           mode: 'online',
         };
       } else {
         visitor = {
           name: req.body.name,
           mode: 'offline',
         };
       }
     });
     break;

 }
 console.log('visitor >>> >> >> >> >>> >>>> >>>> >>>> >>> >>>> >>>', visitor);

Если я вхожу как Администратор роль, консоль посетителя имеет правильные данные, но если авторизован как Менеджер роль, консоль посетителя становится undefined .

Почему это происходит?Я использую ES6, поэтому я не использую var.

1 Ответ

0 голосов
/ 27 сентября 2018

у вас есть асинхронный код в случае диспетчера, который выполняется после console.log.вот почему в этом случае посетитель не определен.

используйте это.

 let visitor;
 const role = req.user.profile;
 let callback = function(){
     console.log('visitor >>> >> >> >> >>> >>>> >>>> >>>> >>> >>>> >>>', visitor); 
 }
 // role will be either Admin or Manager



 switch (role) {
   case 'Admin':
     if (req.body.verificationMode === 'online') {
       visitor = {
         name: req.body.name,
         mode: 'online',
       };
     } else {
       visitor = {
         name: req.body.name,
         mode: 'offline'
       };
     }
     callback();
     break;


   case 'Manager':
     Staff.findOne({
       where: {
         loginId: req.user.id,
       },
     }).then((staffData) => {
       if (req.body.verificationMode === 'online') {
         visitor = {
           name: req.body.name,
           mode: 'online',
         };
       } else {
         visitor = {
           name: req.body.name,
           mode: 'offline',
         };
       }
       callback();
     });
     break;

 }

переместил console.log в функцию, которая вызывается после инициализации значения visitor.

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