FirebaseError:预期类型“DocumentReference”,但它是:一个数组

问题描述 投票:0回答:1

我需要实现与日期的聊天。我使用 firebase 作为后端。

收藏: 聊天 -> 2h73gbu3id933jeif883ue9(文档) -> 消息 -> [日期: x, m: [{}, {}, {}]]

因此,对于特定日期,它应该在

m
数组中添加消息,如果该日期是新的,则应该创建另一个 [date: x, m: [{}, {}, {}]]

代码:

      const today = new Date();
      const currentDay = today.toLocaleDateString("en-US", { weekday: "long" });

      const docRef = doc(db, "chats", chat.chatId);
      const docSnap = await getDoc(docRef);
      const currentMessages = docSnap.data()?.messages || [];

      const lastMessageDate =
        currentMessages.length > 0 &&
        currentMessages[currentMessages.length - 1].date.toDate();
      const isSameDay =
        lastMessageDate &&
        lastMessageDate.toLocaleDateString("en-US", { weekday: "long" }) ===
          currentDay;

      if (!isSameDay) {
        await updateDoc(docRef, {
          messages: arrayUnion({
            date: Timestamp.now(),
            m: [{ uid: currentUser.uid, text: message, isSender: true }],
          }),
        });
      } else {
        const updatedItems = [
          ...currentMessages[currentMessages.length - 1].m,
          { uid: currentUser.uid, text: message, isSender: true },
        ];
        await updateDoc(currentMessages, {
          messages: arrayUnion({
            date: lastMessageDate,
            m: updatedItems,
          }),
        });
      }

当我执行

isSameDate
true 的逻辑时,我得到: 'index.tsx:64 未捕获(承诺中)FirebaseError:预期类型'DocumentReference',但它是:一个数组'

reactjs firebase google-cloud-firestore
1个回答
0
投票

这是因为你这样做

    await updateDoc(currentMessages, {
      messages: arrayUnion({
        date: lastMessageDate,
        m: updatedItems,
      }),
    });

其中

currentMessages
是一个数组。

您应该(可能)使用

DocumentReference
执行以下操作:

await updateDoc(docRef, {
      messages: arrayUnion({
        date: lastMessageDate,
        m: updatedItems,
      }),
    });
© www.soinside.com 2019 - 2024. All rights reserved.