从Firebase检索文档

lymgl2op  于 2023-02-25  发布在  其他
关注(0)|答案(1)|浏览(155)

我刚刚得到了登录工作在我的应用程序,现在直接在我试图拉出文档的用户,所以我可以显示他们的名字在页面上。

email = loginemail.value;
    password = loginpassword.value;
    signInWithEmailAndPassword(auth, email, password)
            .then((userCredential) => {
            // Signed in 
            alert("Thanks for signing in!");
            const user = userCredential.user;
            
            useremail.innerHTML = user.uid;
            // ...
            })
        .catch((error) => {
            const errorCodelogin = error.code;
            const errorMessagelogin = error.message;
            createUserWithEmailAndPassword(auth, email, password)
            .then((userCredential) => {
                alert("Looks like you're a new user - we created a new account for you!");
                const user = userCredential.user;
                // ...
            })
            .catch((error2) => {
                const errorCoderegister = error2.code;
                const errorMessageregister = error2.message;
                pagebody.innerHTML = errorMessagelogin + "<br /><br />" + errorMessageregister;
            });
        });         
        
    const docRef = doc(db, "users", useremail.innerHTML);
    const docSnap = await getDoc(docRef);

    if (docSnap.exists()) {
        console.log("Document data:", docSnap.data());
    } else {
        // doc.data() will be undefined in this case
        console.log("No such document!");
    }

const docRef的最后一部分直接来自Firebase的文档,我只是替换了我的表名和文档ID。
它在控制台中触发此错误:
未捕获(承诺中)Firebase错误:文档引用无效。文档引用必须具有偶数个段,但用户只有1个。

mzsu5hc0

mzsu5hc01#

尝试加载文档的代码在登录完成之前运行。
为了防止这种情况,请使用await而不是then()来返回结果。

const userCredential = await signInWithEmailAndPassword(auth, email, password)
// Signed in 
alert("Thanks for signing in!");
const user = userCredential.user;

useremail.innerHTML = user.uid;
    
const docRef = doc(db, "users", useremail.innerHTML);
const docSnap = await getDoc(docRef);

if (docSnap.exists()) {
    console.log("Document data:", docSnap.data());
} else {
    // doc.data() will be undefined in this case
    console.log("No such document!");
}

一般来说:在你熟悉异步行为之前,不要在你的代码中混合使用await和then,在那之前,使用其中一个,而不是两个都用。

相关问题