Bogopodoben
@Bogopodoben

Как сделать синхронное выполнение функции в angularjs?

Как сделать синхронное выполнение функции?
Перепробовал кучу способов и promice в том числе, ничего не выходит, выполнения фукнции происходит асинхронно.

В данном случае мы передаем в функцию роль, по которой надо запросить данные с api и вывести в RUN config true или false.
authService.checkApiRoles = function (authorizedRoles) {
		console.log('1');

		if (authorizedRoles == 'user') {
			var resultRole;
			$http.get('URL')
			.then(function(res){
				resultRole = res.data.result;
				console.log(resultRole);
				console.log('2');
			})
		};

		console.log('3');
		return resultRole;
	};


В данном случае функция выполняетсяbd69e5e698c243f2b16fc2ed372e844f.PNG
  • Вопрос задан
  • 482 просмотра
Решения вопроса 1
yarkov
@yarkov
Помог ответ? Отметь решением.
А вы хотите синхронные запросы к серверу? Нахрена? Надо так:
authService.checkApiRoles = function (authorizedRoles) {
	var promise = $http({
			url: "URL",
			method: 'GET',
			headers: {}
		})
		.then(function (response) {
			var resultRole = response.data.result;
			return resultRole;
		});
	return promise;
}

**********************************************
Пример использования resolve роутера
/**
 * Роут "Личный кабинет""
 */
$stateProvider
    .state({
        name: 'user', 
        url: "/user",
        templateUrl: "routes/user/user.html",
        controller: 'userController as User',
        resolve: {
            authState: function (userFactory) {
                return userFactory.ValidSession()
                    .then(function (result) {
                        return result;
                    });
            }
        }
    })

// метод сервиса проверяющий валидность сессии на сервере
function ValidSession() {
    var promise = $http({
            url: API.makeUrl(API.URLS.user, "valid"),
            method: 'GET',
            params: {},
            headers: {}
        })
        .then(function (response) {
            $log.debug("ValidSession success: ", response.data);
            var response_data = angular.fromJson(response.data);
            return response_data.valid;
        });
    return promise;
}

// authState инжектится в контроллер
if (authState === true) {
    $state.go('user.profile');
} else {
    $state.go('login');
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы