为什么我从集合中获取的文档没有 collection() 方法?

Why don't documents that I get from a collection have the collection() method?

我正在尝试遍历我的 firestore 数据库中的用户集合,这些用户是文档。我得到的用户文档中有子集合。在这些子集合中,我想添加一个文档。我目前正在将文档添加到子集合中,但我被告知集合方法不存在,因为 userDoc 仍然处于一个没有任何意义的承诺中,因为当我打印 userDoc 的 id 时,我获取 firestore 中文档的 ID。 错误:

Uncaught (in promise) TypeError: userDoc.collection is not a function

我的代码如下。

async function preformSignaling() {
  let users = await negDoc.collection("users").get();

  for (let userDoc of users.docs) {
    if (isNotAlreadyConnected(userDoc.id)) {
      let newPeerConnection = new UserConnection(servers, userDoc.id);

      if (
        userDoc.id != sessionStorage.getItem("userID") &&
        userDoc.id != "metadata"
      ) {
        let connOfferDescription =
          await newPeerConnection.userPeerConnection.createOffer();

        await newPeerConnection.userPeerConnection.setLocalDescription(
          connOfferDescription
        );

        await userDoc.collection("offer-candidates").doc("offer").set({
          offer: newPeerConnection.userPeerConnection.localDescription,
        });
      }

      peerConnections.push(newPeerConnection);
    }
  }
}

class UserConnection {
  constructor(servers, remoteUserID) {
    this.userPeerConnection = new RTCPeerConnection(servers);
    this.remoteStream = new MediaStream();
    this.remoteUserID = remoteUserID;

  getRemoteUserID() {
    return this.remoteUserID;
  }
}

相关代码:

await userDoc.collection("offer-candidates").doc("offer").set({
              offer: newPeerConnection.userPeerConnection.localDescription,
            });

问题与承诺无关;你在等待你应该等待的。问题是 userDoc 是一个 document snapshot (即查询数据库的结果),文档快照没有 .collection 方法。他们基本上只有一个 .data() 方法,然后是一些元数据属性(例如 .id.exists

相反,您需要执行以下操作:

await negDoc
  .collection("users")
  .doc(userDoc.id)
  .collection("offer-candidates")
  .doc("offer")
  .set({
    offer: newPeerConnection.userPeerConnection.localDescription,
  });