Javascript 未定义未处理的承诺拒绝
在我的React Native应用程序中,我有一个自定义登录facebook按钮:Javascript 未定义未处理的承诺拒绝,javascript,react-native,es6-promise,Javascript,React Native,Es6 Promise,在我的React Native应用程序中,我有一个自定义登录facebook按钮: <Button onPress={() => this.handleFacebookLogin()}> <Text>Login with Face</Text> </Button> 但我得到了这个错误: 可能未处理的承诺拒绝(id:20):引用错误: 未定义SigninFaceBookLoginFirebase TypeError:\u this2.Si
<Button onPress={() => this.handleFacebookLogin()}>
<Text>Login with Face</Text>
</Button>
但我得到了这个错误:
可能未处理的承诺拒绝(id:20):引用错误:
未定义SigninFaceBookLoginFirebase
TypeError:\u this2.SigninFaceBookLoginFirebase不是函数
TypeError:\u this2.SigninFaceBookLoginFirebase不是函数
和SigninFaceBookLoginFirebase方法:
signInFacebookLoginInFirebase(facebookToken){
const credential = Fb.firebase.auth.FacebookAuthProvider.credential(facebookToken);
Fb.firebase
.auth()
.signInWithCredential(credential)
.then(() => alert('Account accepted'))
.catch((error) => alert('Account disabled'));
}
通过不对
使用箭头符号。然后回调到logInWithReadPermissions
,此将不会成为SigninFaceBookLoginFirebase
函数的上下文
在AccessToken.getCurrentAccessToken()中使用箭头符号。然后就可以了,现在只需更改
LoginManager.logInWithReadPermissions(['public_profile', 'email', 'user_friends']).then(
function (result) {
到
然后使用注释掉的
this.signInFacebookLoginInFirebase(data.accessToken);
为了妥善处理所有潜在的拒绝,我建议
handleFacebookLogin () {
LoginManager.logInWithReadPermissions(['public_profile', 'email', 'user_friends'])
.then(result => {
if (result.isCancelled) {
console.log('Login cancelled');
} else {
console.log('Login success with permissions: ' + result.grantedPermissions.toString())
return AccessToken.getCurrentAccessToken()
.then(data => this.signInFacebookLoginInFirebase(data.accessToken));
}
// .catch chained from .then to handle all rejections
}).catch(error => {
console.log('Login fail with error: ' + error);
alert('Error at login, no network ?');
})
}
那么您是否有一个名为signInFacebookLoginInFirebase
的函数?注释错误?我尝试了“this”,但没有将函数(结果)
更改为(结果)=>
。。。现在这个
可能是正确的,所以你可以使用这个。signInFacebookLoginInFirebase
-也许?不清楚你的不同代码片段是否正常,谢谢@JaromandaX,如果你发布一个答案,我会支持你的答案
this.signInFacebookLoginInFirebase(data.accessToken);
handleFacebookLogin () {
LoginManager.logInWithReadPermissions(['public_profile', 'email', 'user_friends'])
.then(result => {
if (result.isCancelled) {
console.log('Login cancelled');
} else {
console.log('Login success with permissions: ' + result.grantedPermissions.toString())
return AccessToken.getCurrentAccessToken()
.then(data => this.signInFacebookLoginInFirebase(data.accessToken));
}
// .catch chained from .then to handle all rejections
}).catch(error => {
console.log('Login fail with error: ' + error);
alert('Error at login, no network ?');
})
}