Я сохраняю в переменной логическое значение, чтобы проверить, является ли пользователь администратором или нет, в моей функции, которую я вызываю в сервисе, я могу получить значение результата (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;
}
);
}
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
});
UserService.isAccount
похоже, возвращает обещание, поэтому вы должны использовать его следующим образом:
UserService.isAccount('admin')
.then(function (result) {
vm.isAdmin = result;
});
Итак, результат присваивается, когда он доступен.