다음 코드 스 니펫에서 변수 값에 액세스 할 수없는 이유는 무엇입니까?

PHPFan

Javascript 코드 스 니펫을 따르고 있습니다.

authData=ref.getAuth();

if(authData == null){
    //TODO find an elegant way to manage authorization 
    //  window.location = "../index.html";
} else {
      ref.child("users").child(authData.uid).on("value", function(snapshot){
      $( "span.user-name").html(snapshot.val().displayName);    
      loggedInUser.displayName = snapshot.val().displayName;
      //alert("Name inside : "+loggedInUser.displayName);
      //Here it displays the value      
    });         
}

alert("Nameada is out : "+loggedInUser.displayName);
//Here it shows 'undefined' 

왜?

loggedInUser.displayName경고를 표시 한 변수 값을 사용하고 싶습니다 .

누군가가 값에 액세스하고 경고를 표시하는 데 도움을 줄 수 있습니까?

감사.

Tricot

alert콜백 함수 ( function(snapshot){ ... })가 아직 호출되지 않은 경우 최종 결과 가 실행됩니다 . 콜백 함수는 비동기 적으로 호출되므로 현재 실행중인 코드가 완료되고 value이벤트가 트리거 된 후에 만 실행됩니다.

이것은 또한 내부 (주석 처리됨) alert가 작동 하는 이유를 설명합니다 . 이 코드 조각 (콜백 함수)은 코드에서 더 일찍 발생하더라도 다른 코드 보다 늦게 실행 됩니다alert .

다음과 같이 콜백 내에서 다른 함수를 호출하여 "해결"할 수 있습니다.

authData=ref.getAuth();

if(authData == null){
    //TODO find an elegant way to manage authorization 
    //  window.location = "../index.html";
} else {
    ref.child("users").child(authData.uid).on("value", function(snapshot){
        $( "span.user-name").html(snapshot.val().displayName);    
        loggedInUser.displayName = snapshot.val().displayName;
        whenUserLogged();
    });         
}

function whenUserLogged() {
   alert("Name : "+loggedInUser.displayName);
   // anything else you want to do....
}

개선을위한 몇 가지 제안

너무 많은 전역 변수를 사용하지 말고 (코드에서 모두 전역 변수 임) 대신 변수를 함수 인수로 전달하십시오.

약속 을 살펴볼 수 있습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 코드가이 변수에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

액세스가 보호 될 때마다 객체에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

액세스가 보호 될 때마다 객체에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

콜백에 정의 된 변수가 코드의 다른 곳에서 액세스 할 수있는 이유는 무엇입니까?

분류에서Dev

클래스에서 내 스크립트 변수에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

Swift에서 다른 클래스의 속성에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

PHP 7에서 세션 변수에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

PatriciaTrie에서`floorEntry` 및 기타 메서드에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

함수 내에서 전역 변수에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

PHP의 함수 내에서 개인 변수에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

함수 (Swift3) 내에서 ViewController 변수에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

Ansible에서 파일을 통해로드 된 vars에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

이 폴더에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

내 클래스의 변수에 액세스 할 수없는 이유는 무엇입니까? 파이썬

분류에서Dev

파티션에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

정적 파일에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

NavController.getCurrentBackStackEntry ()에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

Object의 속성에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

파티션에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

WebWorkers가 DOM에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

IPackageFragmentRoot에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

파일 뒤에있는 코드에서 <asp : textbox> 값에 액세스 할 수 없습니다.

분류에서Dev

코드에서 SolidColorBrush 리소스 값을 설정할 수없는 이유는 무엇입니까?

분류에서Dev

rclone으로 NAS 드라이브에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

Selenium이 동적으로로드 된 요소에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

Flutter에서 Firestore 값에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

tcl에서 올바른 pi 값에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

OpenGL : 다른 프레임의 데이터에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

이 전역 변수에 액세스 할 수없는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    내 코드가이 변수에 액세스 할 수없는 이유는 무엇입니까?

  2. 2

    액세스가 보호 될 때마다 객체에 액세스 할 수없는 이유는 무엇입니까?

  3. 3

    액세스가 보호 될 때마다 객체에 액세스 할 수없는 이유는 무엇입니까?

  4. 4

    콜백에 정의 된 변수가 코드의 다른 곳에서 액세스 할 수있는 이유는 무엇입니까?

  5. 5

    클래스에서 내 스크립트 변수에 액세스 할 수없는 이유는 무엇입니까?

  6. 6

    Swift에서 다른 클래스의 속성에 액세스 할 수없는 이유는 무엇입니까?

  7. 7

    PHP 7에서 세션 변수에 액세스 할 수없는 이유는 무엇입니까?

  8. 8

    PatriciaTrie에서`floorEntry` 및 기타 메서드에 액세스 할 수없는 이유는 무엇입니까?

  9. 9

    함수 내에서 전역 변수에 액세스 할 수없는 이유는 무엇입니까?

  10. 10

    PHP의 함수 내에서 개인 변수에 액세스 할 수없는 이유는 무엇입니까?

  11. 11

    함수 (Swift3) 내에서 ViewController 변수에 액세스 할 수없는 이유는 무엇입니까?

  12. 12

    Ansible에서 파일을 통해로드 된 vars에 액세스 할 수없는 이유는 무엇입니까?

  13. 13

    이 폴더에 액세스 할 수없는 이유는 무엇입니까?

  14. 14

    내 클래스의 변수에 액세스 할 수없는 이유는 무엇입니까? 파이썬

  15. 15

    파티션에 액세스 할 수없는 이유는 무엇입니까?

  16. 16

    정적 파일에 액세스 할 수없는 이유는 무엇입니까?

  17. 17

    NavController.getCurrentBackStackEntry ()에 액세스 할 수없는 이유는 무엇입니까?

  18. 18

    Object의 속성에 액세스 할 수없는 이유는 무엇입니까?

  19. 19

    파티션에 액세스 할 수없는 이유는 무엇입니까?

  20. 20

    WebWorkers가 DOM에 액세스 할 수없는 이유는 무엇입니까?

  21. 21

    IPackageFragmentRoot에 액세스 할 수없는 이유는 무엇입니까?

  22. 22

    파일 뒤에있는 코드에서 <asp : textbox> 값에 액세스 할 수 없습니다.

  23. 23

    코드에서 SolidColorBrush 리소스 값을 설정할 수없는 이유는 무엇입니까?

  24. 24

    rclone으로 NAS 드라이브에 액세스 할 수없는 이유는 무엇입니까?

  25. 25

    Selenium이 동적으로로드 된 요소에 액세스 할 수없는 이유는 무엇입니까?

  26. 26

    Flutter에서 Firestore 값에 액세스 할 수없는 이유는 무엇입니까?

  27. 27

    tcl에서 올바른 pi 값에 액세스 할 수없는 이유는 무엇입니까?

  28. 28

    OpenGL : 다른 프레임의 데이터에 액세스 할 수없는 이유는 무엇입니까?

  29. 29

    이 전역 변수에 액세스 할 수없는 이유는 무엇입니까?

뜨겁다태그

보관