firebase 可以写入,但不能读取Firestore文档

r9f1avp5  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(135)

我想知道,为什么我可以使用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,所以我不能进入它。
我很乐意帮忙!
马克西姆

wgx48brx

wgx48brx1#

如错误所示,您的文档路径中有3个段指向集合而不是文档。在这里,您可以从addDoc的结果中获取新创建文档的ID,并在onSnapshot中使用,如下所示:

const docRef = 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", docRef.id), (doc) => {
  console.log("Current data: ", doc.data());
  // ...
});

相关问题