如何在 React Native 中的 firebase 服务函数成功后运行回调函数
Posted
技术标签:
【中文标题】如何在 React Native 中的 firebase 服务函数成功后运行回调函数【英文标题】:How to run callback function after firebase service function succeeded in React Native 【发布时间】:2019-08-15 11:36:41 【问题描述】:我有一个名为FirebaseSvc
的firebase 服务类,我在一个名为Register
的组件中使用它。我想做的是运行一个reducer函数作为firebasecreateUserWithEmailAndPassword
函数的回调。
FirebaseSvc.js 用户创建函数:
createAccount = async (user, success_callback, failed_callback) =>
await firebase.auth()
.createUserWithEmailAndPassword(user.email, user.password);
.then(success_callback, failed_callback);
Register.js 提交用户注册表:
handleSubmit = () =>
const value = this._form.getValue();
axios.post(Api.API_URL + 'user',
'user': this._form.getValue()
)
.then((response) =>
const user_credentials = email: response.data.user.email, password: value.password ;
if (response.status === 200)
firebaseSvc.fetchingSignInMethodsForEmail(
user_credentials,
function()
console.log('register success');
this.props.navigation.state.params.addUser(response.data.user);
this.props.navigation.state.params.addCoupledUsers(response.data.extra_data.coupled_users);
console.log('trying to navigate to homescreen');
this.props.navigation.navigate('HomeScreen');
,
function()
console.log('register failed');
);
)
.catch((error) =>
console.log(error.config);
);
用户成功注册后,我在控制台日志register success
中收到此消息,然后它给我一个错误提示:
可能的未处理的 Promise Rejection (id: 0)
TypeError: undefined is not an object (评估 'this.props.navigation`)
【问题讨论】:
【参考方案1】:我看到了一些可以解决您的错误的方法:
-
为您的回调使用箭头函数将
this
正确绑定到您的组件实例。
替换这个函数:
function()
console.log('register success');
this.props.navigation.state.params.addUser(response.data.user); this.props.navigation.state.params.addCoupledUsers(response.data.extra_data.coupled_users);
console.log('trying to navigate to homescreen');
this.props.navigation.navigate('HomeScreen');
与
() =>
console.log('register success');
this.props.navigation.state.params.addUser(response.data.user);
this.props.navigation.state.params.addCoupledUsers(response.data.extra_data.coupled_users);
console.log('trying to navigate to homescreen');
this.props.navigation.navigate('HomeScreen');
firebaseSvc.fetchingSignInMethodsForEmail
中的错误当前无法在 .catch
方法中到达,因此您会看到 Possible Unhandled Promise Rejection (id: 0)
。
要解决此问题,请在 firebaseSvc.fetchingSignInMethodsForEmail
之前添加 return
return firebaseSvc.fetchingSignInMethodsForEmail(
user_credentials,
...
【讨论】:
以上是关于如何在 React Native 中的 firebase 服务函数成功后运行回调函数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 react-native 中的 mapbox 地图上绘制导航线?
如何更改 react-native 中的默认 fontFamily