возврат функции сервиса не определен

0

Я сохраняю в переменной логическое значение, чтобы проверить, является ли пользователь администратором или нет, в моей функции, которую я вызываю в сервисе, я могу получить значение результата (true или false), но вместо переменной vm.isAdmin im получить неопределенный,

vm.isAdmin = accountType("admin");
function accountType(type){
    UserService.isAccount(type).then(
        function (result) {
           console.log("result");
           console.log(result);
           return result;
        }
    );
}
Теги:
angularjs-scope
angularjs-directive

2 ответа

1

UserService.isAccount возвращает обещание, и вы используете его, устанавливая анонимную функцию в методе then, но ваша основная функция не то же самое, анонимная функция, используемая в функции accountType, называется асинхронной, поэтому результат будет значительно после завершения вашей функции accountType. Функция accountType также должна возвращать обещание или использовать функции обратного вызова.

попробуйте сделать это таким образом (функции обратного вызова):

       function accountType(type,funcYes,funcNo){

            UserService.isAccount(type).then(
                function (result) {

                  if (result===type)//change this if
                  funcYes();
                  else
                      funcNo();

                }
            );
        }

пример использования:

   accountType("admin",function(){ 
   //code for yes  
   },function(){  
   // code for no
   });
  • 0
    Я уже сделал это, но все еще даю мне "c {$$ state: Object}"
  • 0
    Вы никогда не получите логическое значение, логическое значение может быть назначено в функции, которая будет вызываться после обещания. Обещание является асинхронным, вы должны понимать, что асинхронная функция не вызывает в строке, где они находятся в коде, она выполняется некоторое время спустя в той же области. Проверьте мой код и попробуйте.
1

UserService.isAccount похоже, возвращает обещание, поэтому вы должны использовать его следующим образом:

UserService.isAccount('admin')
.then(function (result) {
        vm.isAdmin = result;
    });

Итак, результат присваивается, когда он доступен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню