1

Ich versuche, ein Dokument und seine verschachtelten Dokumente in einer Sammlung innerhalb des Dokuments in Firestore in Firebase mit Angular zu löschen. Im Moment kann ich das Dokument und die Sammlung löschen, aber nicht, ohne dass der Compiler einen Fehler auf mich wirft (error TS2339: Property 'id' does not exist on type '{}'). Der Fehlercode könnte richtig oder falsch sein, ich weiß es ehrlich gesagt nicht, da mein Code die ID findet, die mit dem Objekt verknüpft ist, das ich gerade betrachte. Dies ist mein Code:Löschen von Dokumenten in einer Sammlung mit Angular in Firestore

testID: string; 
private testDoc: AngularFirestoreDocument<Test>; 

constructor(private db: AngularFirestore) { } 

deleteDoc() { 
    console.log('Deleting test'); 
    this.db.collection(`tests/${this.testID}/questions`, ref => ref.orderBy('order')) 
     .valueChanges().subscribe(questions => { 
      questions.map(question => { 
       this.db.doc(`tests/${this.testID}/questions/${question.id}`).delete() 
        .catch(error => {console.log(error); }) 
        .then(() => console.log(`tests/${this.testID}/questions/${question.id}`)); 
      }); 
     }); 
     this.testDoc.delete().catch(error => console.log(error)); 
    } 

ich versucht habe auch zwei Argumente in der Karte Funktion zu übergeben, aber das wirft nur Fehler in der ausgeführten Funktion anstelle des Compilers, damit der Code machte überhaupt nicht (ich könnte pass hier nicht das Richtige auf).

Wie ich bereits erwähnt habe, funktioniert mein Code, aber ich mache definitiv etwas falsch. Meine Frage ist also, was mache ich falsch, um einen Kompilierungsfehler auszulösen und wie vermeide ich das, während ich sicherstelle, dass die Funktion immer noch funktioniert? Hoffe, jemand kann helfen zu klären, was ich hier falsch mache.

Vielen Dank im Voraus.

* Edit, das Dokument enthalten Ich betrachte

export interface Question { 
    description: string; 
    order: number; 
    type: string; 
    id: string; 
    name: string; 
    options?: Object[]; 
    radio_amount?: number; 
    current_chips?: Object[]; 
    imageURL?: string; 
} 
+0

Hat Ihre 'question.id' das ID-Feld oder Sie erwarten den Schlüssel? – Hareesh

+0

Es hat die Feld ID ich glaube ja. Ich habe die Frage aktualisiert, um einzuschließen, was ich gerade ansehe. – Bruhno

+0

Was ist das für ein Teil des Codes? 'This.testDoc.delete()'? – Hareesh

Antwort

0

ich dachte, dass ich auf die Variable den Typ fehlte an die ich suchte, ich wusste aber nicht, wie die Art der, dass erklären Variable in einer Pfeilfunktion als Versuch, externe Variablen in die Funktion aufzunehmen, funktionierte nicht für mich.

Ich habe meinen Fehler behoben, indem ich den Typ wie in meinem Code hier gezeigt hinzugefügt habe. Jetzt funktioniert der Code genau wie vorher und es gibt mir keinen Compilerfehler.

deleteDoc() { 
    this.db.collection(`tests/${this.testID}/questions`, 
     ref => ref.orderBy('order')).valueChanges().subscribe(questions => { 
     questions.map((question: Question) => { 
      this.db.doc(`tests/${this.testID}/questions/${question.id}`).delete() 
       .catch(error => {console.log(error); }) 
       .then(() => console.log(`Deleting question (${question.id}) in (${this.testID})`)); 
     }); 
    }); 
    this.testDoc.delete().catch(error => console.log(error)).then(() => console.log(`${this.testID} has been deleted.`)); 
} 

Ich schätze die Hilfe ein paar von euch haben versucht, mich zu geben, aber sie schien mehr auf die Tatsache zu sein, dass mein Code funktioniert nicht, wenn das nie der Fall oder die Frage war. Der Fokus lag auf dem Fehler, den ich in der Frage angegeben hatte, die vom Compiler trotz funktionierender Funktion ausgelöst wurde und wie der Code richtig geschrieben wurde, um den Fehler nicht zu verursachen.

Schnell heads-up, ich empfehle nicht die oben genannte Funktion zu verwenden, da dies derzeit ausgeführt wird, während die Sammlung von Fragen abonniert und damit auch den Code mehrere Male ausgeführt wird, wie der Wert ändert, wenn ich die Dokumente während der löschen Funktion. Es funktioniert, aber es ist nicht optimiert.

Verwandte Themen