Reactjs Firebase set()承诺第二次卡住“;createUserWithEmailAndPassword";

Reactjs Firebase set()承诺第二次卡住“;createUserWithEmailAndPassword";,reactjs,firebase,google-cloud-firestore,Reactjs,Firebase,Google Cloud Firestore,我与firebase和reactJs合作。所以我在这里尝试注册firebase auth,一旦承诺兑现,我就尝试访问firestore数据库。当我第一次这样做时,它是完美的,但当我注销并尝试创建一个以上的帐户时,该帐户被成功创建,但对数据库的承诺被卡住,然后当我注销时,它抛出该承诺中的错误“关于数据库访问”。这是代码 import React, { useContext } from 'react'; import { Formik, Form, Field } from 'formik'; i

我与firebase和reactJs合作。所以我在这里尝试注册firebase auth,一旦承诺兑现,我就尝试访问firestore数据库。当我第一次这样做时,它是完美的,但当我注销并尝试创建一个以上的帐户时,该帐户被成功创建,但对数据库的承诺被卡住,然后当我注销时,它抛出该承诺中的错误“关于数据库访问”。这是代码

import React, { useContext } from 'react';
import { Formik, Form, Field } from 'formik';
import * as Yup from 'yup';

import firebase from '../../firestore/Firestore';
import AppContext from '../../context/AppContext';
import Google from './GoogleSignIn';

const LoginSchema = Yup.object().shape({
    firstName: Yup.string()
        .required('Required'),
    lastName: Yup.string()
        .required('Required'),
    email: Yup.string()
        .email('Invalid email')
        .required('Required'),
    password: Yup.string()
        .min(6, 'Password has to be atleast 6 characters long')
        .required('Required'),
    confirmPassword: Yup.string()
        .oneOf([Yup.ref('password'), null], 'Passwords do not match')
        .required('Required'),
});


const SingUp = ({ signIn }) => {

    const context = useContext(AppContext);
    const { state, dispatch } = context;
    const db = firebase.firestore();

    const signUp = (e) => {
        firebase.auth().createUserWithEmailAndPassword(e.email, e.password).then((user) => {
            console.log('it entered here');
            db.collection("resumeData").doc(user.user.uid).set({ profiles: [context.initialState.data] }).then(()=>
            {console.log('done', user.user.uid)
            }).catch((x) => { console.log(x) });
            db.collection("users").doc(user.user.uid).set({ firstName: e.firstName, lastName: e.lastName }).catch((x) => { console.log(x) });
        }).catch(function (error) {

          //error Handling
        });
    }

    return (
        <div className="">

            <div className="text-xl m-2 font-medium text-center lg:text-3xl">Create new Account</div>

            <Formik
                initialValues={{
                    email: '',
                    password: '',
                    firstName: '',
                    lastName: '',
                    confirmPassword: '',
                }}
                validationSchema={LoginSchema}
                // validator={() => ({})}
                onSubmit={values => {
                    dispatch({ type: 'on_input', payload: { key: "errorMessage", value: null } });
                    signUp(values);
                }}
            >
                {({ errors, touched }) => (
                    <Form>
                        <div className="w-full flex justify-center items-center">
                            <div className={`w-full flex flex-col my-2 mr-4`}>
                                <label className="uppercase tracking-wide text-gray-600 text-xs font-semibold mb-2 lg:text-2xl">First Name</label>
                                <Field placeholder="Enter First Name" required name="firstName" type="firstName" className="appearance-none block w-full bg-gray-200 text-gray-800 border border-gray-200 rounded py-3 px-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500 lg:text-3xl" />
                                {errors.firstName && touched.firstName ? <div className="text-red-600">{errors.firstName}</div> : null}
                            </div>

                            <div className={`w-full flex flex-col my-2 ml-4`}>
                                <label className="uppercase tracking-wide text-gray-600 text-xs font-semibold mb-2 lg:text-2xl">Last Name</label>
                                <Field placeholder="Enter Last Name" required name="lastName" type="lastName" className="appearance-none block w-full bg-gray-200 text-gray-800 border border-gray-200 rounded py-3 px-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500 lg:text-3xl" />
                                {errors.lastName && touched.lastName ? <div className="text-red-600">{errors.lastName}</div> : null}
                            </div>
                        </div>


                        <div className={`w-full flex flex-col my-2`}>
                            <label className="uppercase tracking-wide text-gray-600 text-xs font-semibold mb-2 lg:text-2xl">Email</label>
                            <Field placeholder="Enter Email" required name="email" type="email" className="appearance-none block w-full bg-gray-200 text-gray-800 border border-gray-200 rounded py-3 px-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500 lg:text-3xl" />
                            {errors.email && touched.email ? <div className="text-red-600">{errors.email}</div> : null}
                        </div>

                        <div className="w-full flex justify-center items-end">
                            <div className={`w-full flex flex-col my-2 mr-4`}>
                                <label className="uppercase tracking-wide text-gray-600 text-xs font-semibold mb-2 lg:text-2xl">Password</label>
                                <Field placeholder="Enter Password" required name="password" type="password" className="appearance-none block w-full bg-gray-200 text-gray-800 border border-gray-200 rounded py-3 px-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500 lg:text-3xl" />
                                {errors.password && touched.password ? <div className="text-red-600">{errors.password}</div> : null}
                            </div>

                            <div className={`w-full flex flex-col my-2 ml-4`}>
                                <label className="uppercase tracking-wide text-gray-600 text-xs font-semibold mb-2 lg:text-2xl">Confirm Password</label>
                                <Field placeholder="Confirm Passowrd" type="password" required name="confirmPassword" className="appearance-none block w-full bg-gray-200 text-gray-800 border border-gray-200 rounded py-3 px-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500 lg:text-3xl" />
                                {errors.confirmPassword && touched.confirmPassword ? <div className="text-red-600">{errors.confirmPassword}</div> : null}
                            </div>
                        </div>

                        {state.loading.state ?
                            <div className="font-semibold text-center">{state.loading.message}</div>
                            : <div className="text-red-700 font-semibold text-center">{state.errorMessage}</div>}

                        <div className="w-full flex justify-between items-center mb-4 mt-6">
                            <button disabled={state.loading.state} type="submit" value="submit" className="w-full px-5 py-2 bg-blue-600 shadow-md hover:shadow-2xl rounded-lg hover:bg-blue-800 inline-flex justify-center items-center">
                                <span className="text-white font-semibold lg:text-2xl">Sign Up</span>
                            </button>
                        </div>
                    </Form>
                )}
            </Formik>

            <Google message={'SignUp through Google'} />

            <button className="text-blue-600 font-semibold mt-6 lg:text-2xl" onClick={signIn}>Already have an Account?</button>

        </div>
    )
}

export default SingUp;
import React,{useContext}来自“React”;
从'Formik'导入{Formik,Form,Field};
从“是”以是的形式导入*;
从“../../firestore/firestore”导入firebase;
从“../../context/AppContext”导入AppContext;
从“./GoogleSignIn”导入Google;
const LoginSchema=Yup.object().shape({
名字:Yup.string()
.required(“required”),
lastName:Yup.string()
.required(“required”),
电子邮件:Yup.string()
.email(“无效电子邮件”)
.required(“required”),
密码:Yup.string()
.min(6,‘密码长度必须至少为6个字符’)
.required(“required”),
confirmPassword:Yup.string()
.oneOf([Yup.ref('password'),null],'Passwords not match')
.required(“required”),
});
常数SingUp=({signIn})=>{
const context=useContext(AppContext);
const{state,dispatch}=context;
const db=firebase.firestore();
常数注册=(e)=>{
firebase.auth().createUserWithEmailAndPassword(e.email,e.password)。然后((user)=>{
console.log('it entered here');
db.collection(“resumeData”).doc(user.user.uid).set({profiles:[context.initialState.data]})。然后(()=>
{console.log('done',user.user.uid)
}).catch((x)=>{console.log(x)});
db.collection(“users”).doc(user.user.uid).set({firstName:e.firstName,lastName:e.lastName}).catch((x)=>{console.log(x)});
}).catch(函数(错误){
//错误处理
});
}
返回(
创建新帐户
({})}
onSubmit={values=>{
分派({type:'on_input',有效负载:{key:'errorMessage',value:null}});
注册(价值观);
}}
>
{({错误,触摸})=>(
名字
{errors.firstName&&toucted.firstName?{errors.firstName}:null}
姓
{errors.lastName&&toucted.lastName?{errors.lastName}:null}
电子邮件
{errors.email&&touch.email?{errors.email}:null}
密码
{errors.password&&toucted.password?{errors.password}:null}
确认密码
{errors.confirmPassword&&touch.confirmPassword?{errors.confirmPassword}:null}
{state.loading.state?
{state.loading.message}
:{state.errorMessage}
注册
)}
已经有账户了吗?
)
}
出口违约清算;
在上面的注册功能中,有两个console.log可以让事情顺利进行。。。。第一个“此处输入”总是被触发,但第二个“完成”的总是第一次被触发,而不是第二次

更多信息:我对它进行了更多的测试,这个错误只有在连续创建新帐户时才会发生。即使是谷歌

救命


几天后:50000人曾经住在这里,现在它成了一个鬼城。无论如何,我仍然无法找到解决方案,但我找到了解决方法,在登录后没有立即更新数据库。

我的Vue应用程序也有类似问题,并看到以下线程:。 我想这个问题将在未来的版本中得到解决,但在此之前,这个解决方案似乎是可行的:。
我在创建用户和创建文档之间添加了100毫秒的超时,解决了这个问题。希望它也能对您有所帮助。

我找到了解决方法,不是在开始时直接创建文档,而是在需要数据库时创建文档。谢谢你的回答,我很高兴知道,不是我干的蠢事。