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
경고를 표시 한 변수 값을 사용하고 싶습니다 .
누군가가 값에 액세스하고 경고를 표시하는 데 도움을 줄 수 있습니까?
감사.
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] 삭제
몇 마디 만하겠습니다