>source

사용자가 로그인했을 때 현재 세션을 세고 싶습니다. sessionStorage에 사용자 세부 정보를 저장하기 때문에 API 요청이 sessionStorage의 토큰에 액세스하려면 location.reload를 수행해야합니다. 문제는 일단 다시로드하면 함수의 나머지 코드가 지워 지거나 무시된다는 것입니다. 콘솔 로깅을 시도했는데 약 0.5 초 동안 콘솔이 지워졌습니다. 어떻게 와서 setTimeout 함수를 계속 실행하여 지속시킬 수 있습니까?

loginUser: function(username, password) {
    var loginDetails = {"username": username, "password": password};
    return loginResource.save({}, loginDetails).$promise.then(function(response){
        var user = {
            name: username,
            token: response.token,
        }
        sessionStorage.user = angular.toJson(user);
        $window.location.reload();
    })
    .catch(function(reason) {
        console.warn("Failed login", reason);
        throw reason;
    });
},
beginCountdown: function() {
    console.log('begin');
    setTimeout(function(){
        sessionStorage.removeItem('user');
        $window.location.reload();
    }, 3000)
},


  • 답변 # 1

    와이즈 비즈

    그렇지 않습니다.

    Because I store user details in sessionStorage, I need to do a location.reload in order for API-requests to be able to access the token in sessionStorage.

    …는 1 행에 저장되고 2 행에 검색된 데이터를 보여줍니다.

    와이즈 비즈

    이 페이지는 JavaScript가 실행되는 환경입니다.

    페이지를 다시로드하는 것은 컴퓨터를 재부팅하고 Windows 응용 프로그램이 왜 상태를 유지하지 않는지 궁금합니다. JS에서 프로그램을 작성하여 상태를 저장하고 다시 열 때 다시로드하는 것은가능이지만, 그렇게하지 않는 것 같습니다.

    페이지를 다시로드하지 마십시오. 실제 문제를 해결하십시오. (JavaScript 프로그램을로드 할 때 세션 저장소에서 데이터를 읽은 다음 작업중인 해당 데이터의 사본을 유지하는 변수가 아닌 세션 저장소에만 업데이트를 작성하는 것 같습니다.)

    sessionStorage.setItem('key', 'value'); let data = sessionStorage.getItem('key'); console.log(data);

  • 이전 azure devops - ADO 빌드 파이프 라인에 아티팩트 중 하나만 빌드하는 방법이 있습니까?
  • 다음 spring - Java ModelMapper는 객체에 객체를 매핑