2017-10-31 16 views
0

だから私はこのコードを持っている:(リアクト-ネイティブの)可能性のある未処理の約束拒絶FBSDK

export default class Login extends Component { 

    constructor(props){ 
    super(props); 
    this._fbAuth = this._fbAuth.bind(this); 
    this.login = this.login.bind(this); 
    } 

    login(){ 
     this.props.navigator.push({ 
     id: "Home", 
     }); 
    } 

    _fbAuth(){ 
    LoginManager.logInWithReadPermissions(['public_profile']).then(
     function(result) { 
     if (result.isCancelled) { 
      alert('Login cancelled'); 
     } else { 
alert('Login success with permissions: '+result.grantedPermissions.toString()); 
      this.login(); 
     } 
     }, 
     function(error) { 
     alert('Login fail with error: ' + error); 
     } 
    ); 
    } 

    render() { 
    return (
     <View style={styles.container}> 
       <View style={styles.botbuttoncontainer}> 
       <Text style={styles.otherlogintext}>Or log in using</Text> 
       <View style={styles.otherloginbutton}> 
       <TouchableOpacity style={styles.facebookbutton} activeOpacity={0.5} onPress={()=>this._fbAuth()}> 
        <Icons name="logo-facebook" size={20} color="white"/> 
       </TouchableOpacity> 
       <TouchableOpacity style={styles.twitterbutton} activeOpacity={0.5}> 
        <Icons name="logo-twitter" size={20} color="white"/> 
       </TouchableOpacity> 
       <TouchableOpacity style={styles.googlebutton} activeOpacity={0.5}> 
        <Icons name="logo-googleplus" size={20} color="white"/> 
       </TouchableOpacity> 
       </View> 
       </View> 
     </View> 
    ); 
    } 
} 

私はそれが成功のFacebookでログインしようとするたびに。しかし、私は常に警告が言う得る

"Possible Unhandled Promise Rejection(id:0): TypeError: undefined is not a function (evaluating 'this.login()')"

私は両方の機能_fbAuthを結合して、コンストラクタにログインしようとしたが、それはまだ同じ警告を与えています。

答えて

1

コールの内部関数をバインドする必要があります。それは仕事の約束

LoginManager.logInWithReadPermissions(['public_profile']).then(
    (result) => { 
    if (result.isCancelled) { 
     alert('Login cancelled'); 
    } 
    else { 
     alert('Login success with permissions: ' + result.grantedPermissions.toString()); 
     this.login(); 
    } 
    }, 
    function (error) { 
    alert('Login fail with error: ' + error); 
    } 
).catch((error) => console.error(error)); // error handling for promise 
+0

使用するときもう一つの良い練習がcatchを使用している

LoginManager.logInWithReadPermissions(['public_profile']).then( function (result) { if (result.isCancelled) { alert('Login cancelled'); } else { alert('Login success with permissions: ' + result.grantedPermissions.toString()); this.login(); } }.bind(this), function (error) { alert('Login fail with error: ' + error); } ); 

または使用することができます矢印機能

LoginManager.logInWithReadPermissions(['public_profile']).then( (result) => { if (result.isCancelled) { alert('Login cancelled'); } else { alert('Login success with permissions: ' + result.grantedPermissions.toString()); this.login(); } }, function (error) { alert('Login fail with error: ' + error); } ); 

!ありがとうございます。まず、_fbAuthのバインドで十分です。 –

関連する問題