You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Firestore文档存入变量后丢失引用的问题排查

问题:Firestore文档引用跨函数复用出现随机类型不匹配错误

场景与实现逻辑

我需要从Firebase获取用户文档并设为全局变量,方便在多个函数中复用。其中displaySavedPlaces()函数要获取用户收藏的所有"places"文档列表,这些收藏以文档引用数组的形式存在Firestore的用户文档中。

我在onAuthStateChanged()回调里完成全局变量的赋值:获取当前用户uid对应的文档,存入currentUser变量,同时保存用户uid和文档引用供后续调用:

let authChangeListeners = [];

export function onAuthChange(listener) {
    authChangeListeners.push(listener);
}

window.currentUser = null;

onAuthStateChanged(auth, async (userFirebase) => {
    // Si user firebase, on remplit user de la db
    if (userFirebase) {
        const userRef = doc(db, "users", userFirebase.uid);
        const userDoc = await getDoc(userRef);
        const userData = userDoc.data();
        currentUser = { uid: userDoc.id, ...userData, ref: userRef };
        const avatarRef = ref(avatarsImageRef, currentUser.customAvatar ?? "default-av.webp");
        currentUser.avatarUrl = await getDownloadURL(avatarRef);
    }

    authChangeListeners.forEach((listener) => {
        return listener(currentUser);
    });
});

触发的错误

调用displaySavedPlaces函数时,Firebase会抛出随机错误(触发概率约2/3),错误来自getDoc()函数:

Type does not match the expected instance. Did you pass a reference from a different Firestore SDK?

调用displaySavedPlaces的代码如下:

import { onAuthChange } from "./assets/javascripts/main";

onAuthChange(async (user) => {
    if (user) {
        displaySavedPlaces(user);
    } else {
    }
});

async function displaySavedPlaces(user) {
    elements.savedPlacesContainer.innerHTML = "";
    user.savedPlaces.forEach(async (elem) => {
        console.log(elem);
        const placeSnapshot = await getDoc(elem);
        const place = placeSnapshot.data();
        ...
    });
}

调试发现

无论是否报错,console.log(elem)都能显示结构正常的文档引用对象。但如果把收藏的places存入currentUser以外的变量,就不会出现问题;甚至直接执行currentUser = userData也会触发错误,说明引用在赋值给currentUser的过程中出现了异常。请问这是什么原因?

内容的提问来源于stack exchange,提问作者Floran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:12:36