2017-01-31 3 views
0

Ich verwende AngularFire2 für mein eckiges 2-Projekt.AngularFire2 Rückruf für Einstellungswerte

Inside my forms.service.ts, ich habe

saveToFirebase(bug: MyBugs) { 

    const bugRef = this.af.database.object('/bugs'); 

    bugRef.set(bug) 
} 

Und in meinem app.component.ts zu Feuerbasis folgendes zu speichern, ich habe

this.formsService.saveToFirebase(bug); 

ich sehe, dass meine Firebase konnte die Daten speichern. Ich hätte jedoch gern eine Art Rückruf für den Status der Anfrage (Erfolg, fehlgeschlagen, Timeout?), So dass ich während des Prozesses eine Art Aktivitätsanzeige anzeigen kann. Ich möchte das in meiner app.component Datei tun, wo ich saveToFirebase nennen()

Antwort

1

set returns a promise, wenn Sie also das Versprechen von Ihrer Service-Methode zurück:

saveToFirebase(bug: MyBugs): Promise<void> { 
    const bugsObject = this.af.database.object('/bugs'); 
    return bugsObject.set(bug); 
} 

es kann wie folgt aufgerufen werden:

this.formsService 
    .saveToFirebase(bug) 
    .then(() => console.log('done!')) 
    .catch(error => console.log(error)); 

Da der Datenbankpfad Sie verwendet haben bugs genannt wird, und dass Sie einen einzigen Fehler Hinzufügen zu erscheinen, es ist wahrscheinlich, dass list und push sind, was Sie suchen.

Die Methode push fügt ein untergeordnetes Element zu einem übergeordneten Verweis hinzu und generiert einen Push-Schlüssel (eine Kombination einiger zufälliger Daten und eines Zeitstempels - damit die Schlüssel nach Zeit sortiert werden). Es gibt eine "thenable" Datenbankreferenz zurück (d. H. Eine Versprechung), von der Sie die Drucktaste erhalten können.

Sie so etwas tun könnte:

saveToFirebase(bug: MyBugs): Promise<string> { 
    const bugsList = this.af.database.list('/bugs'); 
    const result = bugsList.push(bug); 
    return result.then(() => result.key) as Promise<string>; 
} 

es kann wie folgt aufgerufen werden:

this.formsService 
    .saveToFirebase(bug) 
    .then((key: string) => console.log('pushed: ' + key)) 
    .catch(error => console.log(error)); 

Das obige Beispiel das Versprechen an die Drucktaste löst, so dass sie in den Dienst der verfügbar ist Anrufer.

+0

Danke. Woher weiß ich, ob in diesem Fall ein Fehler aufgetreten ist? – user172902

+0

Sie würden 'catch' verwenden. Ich habe die Antwort aktualisiert. – cartant

+0

Eigentlich 'set' gibt' firebase.Promise 'zurück, was ein wenig ärgerlich ist, aber es ist sicher, es zu werfen:' return bugRef.set (bug) als Versprechen ; ' – cartant