0

사용자를 성공적으로 로그인하는 기능이 있습니다. 내가 원하는 무엇Polymer firebase .. 비밀번호와 이메일 인증

_login: function() { 
    var email = this.$.emailvalue.value; 
    var password = this.$.passwordvalue.value; 

    return this.$.authenticate.signInWithEmailAndPassword(email, password).then(function() { 
     // Sign-in successful. 
     //this._animateView(); **returns undefined** 
    }, function(error) { 
     // An error happened. 
    //  // Handle Errors here. 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     console.log(errorMessage); 
     // this._animateErrorView(); **returns undefined** 
    }); 

    }, 

함수 this._animateView();를 호출 할 때 사용자가 성공적으로 로그 및 this._animateErrorView() 오류가 있습니다. 나는이 문제

답변

1

this의 의미는 콜백 함수에서 다른를 해결하려면 어떻게해야

내가 뭔가를 정의되지 않은 반환 할 시도 할 경우

....

여러 가지 방법으로 해결할 수 있지만 여기에는 두 가지가 있습니다.

캡처 문제가 해결 단순히 어떻게 자바 스크립트를 폐쇄 이후 당신은 새 값을 얻기에서 this을 방지 할 수있는 또 다른 변수

이의 값. 하지만 할 수있는 것은 값인으로 다른 값을 정의하는 것입니다.

_login: function() { 
    var email = this.$.emailvalue.value; 
    var password = this.$.passwordvalue.value; 
    var self = this;  
    return this.$.authenticate.signInWithEmailAndPassword(email, password).then(function() { 
     self._animateView(); 
    }, function(error) { 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     console.log(errorMessage); 
     self._animateErrorView(); 
    }); 
    } 

사용 지방 화살표 기능

ES6 소위 지방 화살표로 함수를 선언 할 수있는 새로운 방법을 정의 (=> : 저는 개인적으로 더 자세한 설명 뭔가를 선호하지만 변수에 대한 관용적 이름은 self입니다). 코드가 약간 줄어드는 것 외에도 λ/콜백에있는 this의 값은 변경되지 않습니다. 기본적으로 당신이 매일 콜백에 .bind(this)를 추가 그래서

_login: function() { 
    var email = this.$.emailvalue.value; 
    var password = this.$.passwordvalue.value; 

    return this.$.authenticate.signInWithEmailAndPassword(email, password).then(function() { 
     // Sign-in successful. 
     //this._animateView(); **returns undefined** 
    }.bind(this), function(error) { 
     // An error happened. 
    //  // Handle Errors here. 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     console.log(errorMessage); 
     // this._animateErrorView(); **returns undefined** 
    }.bind(this)); 

    }, 

: 그래서

@Frank 반 Puffelen 응답에 추가
_login: function() { 
    var email = this.$.emailvalue.value; 
    var password = this.$.passwordvalue.value; 
    return this.$.authenticate.signInWithEmailAndPassword(email, password).then(() => { 
     this._animateView(); 
    }, (error) => { 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     console.log(errorMessage); 
     this._animateErrorView(); 
    }); 
    } 
1

, 사방 폴리머 개발팀에서 사용하는 다른 방법도 있습니다 끝.