簡體   English   中英

當從 firestore 的 firebase 雲 function 中獲取數據時,我們在使用轉換器時得到的是不可分配的錯誤

[英]When fetching data in a firebase cloud function from firestore we get is not assignable errors when using a converter

我正在編寫一個雲 function,它需要使用 get() 從 firestore 檢索文檔。 然后我需要使用這些數據,所以我嘗試使用一個轉換器,以便稍后可以使用 object。 轉換器使用 FamilyRequest 來指定字段。 這是相關代碼:

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
import * as firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';

admin.initializeApp();

const db = admin.firestore();
const settings = {timestampsInSnapshots: true};
db.settings(settings);

class FamilyRequest {
  recipient;
  sender;
  familyId;
  role;
  senderIsModGuard;

  constructor (recipient: string, sender: string, familyId: string, role: string, senderIsModGuard: boolean) {
      this.recipient = recipient;
      this.sender = sender;
      this.familyId = familyId;
      this.role = role;
      this.senderIsModGuard = senderIsModGuard;
  }
  toString() {
      return this.recipient + ', ' + this.sender + ', ' + this.familyId + ', ' + this.role + ', ' + this.senderIsModGuard;
  }
}

const familyRequestConverter = {
  toFirestore(famrequest: FamilyRequest): firebase.firestore.DocumentData {
    return {
      recipient: famrequest.recipient,
      sender: famrequest.sender,
      familyId: famrequest.familyId,
      role: famrequest.role,
      senderIsModGuard: famrequest.senderIsModGuard
      };
  },
  fromFirestore(
    snapshot: firebase.firestore.QueryDocumentSnapshot,
    options: firebase.firestore.SnapshotOptions
  ): FamilyRequest {
    const data = snapshot.data(options)!;
    return new FamilyRequest(data.recipient, data.sender, data.familyId, data.role, data.senderIsModGuard);
  }
};


export const acceptFamilyRequestFromFamilyModerator = functions.https.onCall(
  async (data, context) => {

     // Message text passed from the client.
     if (data && context && context.auth && context.auth.uid) {
      const groupId = data.text.groupId;
      // Authentication info is automatically added to the request.
      const uid = context.auth.uid;
      const requid = data.text.uid;
      
      const famrequestrecipient = data.text.famrequestrecipient;
      const famrequestsender = data.text.famrequestsender; //this is the original sender of the famrequest

      //Do sender/recipient checks here

      const ref = await db.collection("famrequests")
        .doc(uid)
        .collection('myfamrequests')
        .doc(famrequestrecipient)
        .withConverter(familyRequestConverter)
        .get()
          .then(doc => { //This is simplified for now
            if (doc.exists) {
              return doc;
            } else {
              return null;
            }
          });

     }

  });

將此代碼輸入 IDE 時,出現以下錯誤:

沒有過載匹配此調用。 重載 1 of 2,'(converter: null): DocumentReference',出現以下錯誤。 '{ toFirestore(famrequest: FamilyRequest): DocumentData; 類型的參數 fromFirestore(快照:QueryDocumentSnapshot,選項:SnapshotOptions):FamilyRequest; }' 不可分配給 'null' 類型的參數。 重載 2 of 2,'(converter: FirestoreDataConverter): DocumentReference',出現以下錯誤。 '{ toFirestore(famrequest: FamilyRequest): DocumentData; 類型的參數 fromFirestore(快照:QueryDocumentSnapshot,選項:SnapshotOptions):FamilyRequest; }' 不可分配給 'FirestoreDataConverter' 類型的參數。 “fromFirestore”的屬性類型不兼容。 類型'(快照:QueryDocumentSnapshot,選項:SnapshotOptions)=> FamilyRequest'不可分配給類型'(快照:QueryDocumentSnapshot)=> FamilyRequest'.ts(2769)const familyRequestConverter:{toFirestore(famrequest:FamilyRequest):firebase.firestore。文檔數據; fromFirestore(快照:firebase.firestore.QueryDocumentSnapshot,選項:firebase.firestore.SnapshotOptions):FamilyRequest; }

我不完全確定我做錯了什么,因為我在這里遵循轉換器的示例代碼: https://firebase.google.com/docs/firestore/query-data/get-data#web-version-8_3非常接近.

任何幫助深表感謝。

我對 familyRequestConverter 進行了以下更改:

const familyRequestConverter = {
  toFirestore: function(famrequest: FamilyRequest): firebase.firestore.DocumentData {
    return {
      recipient: famrequest.recipient,
      sender: famrequest.sender,
      familyId: famrequest.familyId,
      role: famrequest.role,
      senderIsModGuard: famrequest.senderIsModGuard,
      };
  },
  fromFirestore: function(
    snapshot: firebase.firestore.DocumentData
  ) {
    const data = snapshot.data()!;
    return new FamilyRequest(data.recipient, data.sender, data.familyId, data.role, data.senderIsModGuard);
  }
};

如果您在傳遞給withConverter function 的轉換器 object 中缺少toFirestorefromFirestore函數,則可能會導致此重載錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM