如何在 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 中的循环中查找

如何在 react-native 中的 mapbox 地图上绘制导航线?

如何在 React Native 中的组件之间传递数据

如何更改 react-native 中的默认 fontFamily

如何在 React Native 中的 setState 之前停止执行

如何使用给定的 nativeID 识别目标 c 中的视图(在 react-native 中给出)