我想知道,为什么我可以使用addDoc将数据写入Firestore,而不能使用onSnapshot()
读取数据
// CheckoutForm.js
import { addDoc, setDoc, doc, onSnapshot, collection, getDoc } from "firebase/firestore";
import { firestore } from "../../firebase";
import { getStripe } from "./initializeStripe";
export async function createCheckoutSession(uid) {
// Create a new checkout session in the subollection inside this users document
await addDoc(collection(firestore, "users", `${uid}`, "checkout_sessions"), {
price: "price_1M0jbXFlIMqx6x27XApjUcnp",
success_url: window.location.origin,
cancel_url: window.location.origin,
})
// Wait for the CheckoutSession to get attached by the extension
onSnapshot(doc(firestore, "users", `${uid}`, "checkout_sessions"), (doc) => {
console.log("Current data: ", doc.data());
const { sessionId } = doc.data();
if (sessionId) {
const stripe = await getStripe();
stripe.redirectToCheckout({ sessionId });
}
});
}
芳子抛给我一个错误:
未处理的承诺拒绝:Firebase错误:文档引用无效。文档引用必须具有偶数个段,但users/XQRo 8 Mn 0 k7 awkxCYPTQ 7IeWHID 93/checkout_sessions具有3个段
之前我用setDoc
写数据的时候,我还是不明白为什么我不能用它写,现在用onSnapshot()
写数据的时候,需要一些确切的路径数,当我用addDoc
写数据的时候,它给予了doc一个随机的id,所以我不能进入它。
我很乐意帮忙!
马克西姆
1条答案
按热度按时间wgx48brx1#
如错误所示,您的文档路径中有3个段指向集合而不是文档。在这里,您可以从
addDoc
的结果中获取新创建文档的ID,并在onSnapshot
中使用,如下所示: