2016-04-05 18 views
2

Kann jemand erklären, wie Versprechen in Angular2 und Firebase korrekt implementieren.Versprechen in angular2 mit Firebase

Ich habe einige Artikel wie diesen lesen https://www.firebase.com/blog/2016-01-21-keeping-our-promises.html

in meiner app.component.ts Datei, die ich dieses

export class AppComponent{ 
    players: Player[]; 

    constructor(private _playerService: PlayerService){} 

    getPlayers(){ 
     this._playerService.getPlayers().then(res => this.players = res); 
    } 

    ngOnInit(){ 
     this.getPlayers(); 
    } 
} 

haben in der player.service.ts Datei Ich habe diese

getPlayers() { 
    this.playersRef.once('value', function (snap){ 
     return snap.val(); 
    }); 
} 

ich immer bekommen Typeerror: this._playerService.getPlayers (...) ist

undefined

Ich habe auch versucht, dies als der Artikel oben schlägt

getPlayers() { 
    var data; 
    this.playersRef.once('value').then(function (snap){ 
     data = snap.val(); 
    }); 
    return data; 
} 

Aber dann bekomme ich diese: Fehler: Query.once fehlgeschlagen: Wurde mit 1 Argument aufgerufen. Erwartet, dass mindestens 2 in [null]

Ich bin nicht sicher, wie der Artikel überhaupt mit .Sobald (‚value‘) zu arbeiten. Dann()

Antwort

4

Problem tritt auf, weil Sie mit .then versuchen über eine Methode, die kein Versprechen verwendet. Im Wesentlichen verpasst, promise von getPlayers Methode zurückzugeben, sollten Sie versprechen, von dort aus Versprechen Verkettung mit .then Methode über es durchzuführen.

Auch Rückruf nicht zurück verwendet Wert von ihm (da Rückruf nicht in der Lage ist von der Rückgabe nichts), verwendet .then Funktion über .once, so dass Sie versprechen Kette & in der Lage, erweitern können, um Daten korrekt zurückkehren werden.

-Code

getPlayers() { 
    //returned promise here 
    return this.playersRef.once('value').then((snap) => { 
     return snap.val(); 
    }); 
} 
+0

@ Ska1111 Versuchen aktualisiert solution..should Arbeit haben .. –

+0

'.Sobald()' asynchron ist, deshalb habe ich '.then' darüber, so dass die Daten erhalten Zurückgegeben einmal Versprechen erfüllt .. schaue dir die udpate Antwort an..Ich habe die Pfeilfunktion '=>' in '.then 'vermisst .. –

+0

Sorry, ich habe nicht bemerkt, dass du deine Antwort schon aktualisiert hast. Das ist, was ich bekomme, wenn ich es nur mit '.once ('Wert') mache. Dann (...)' Fehler: 'Query.once ist fehlgeschlagen: Wurde mit 1 Argument aufgerufen. Erwartet mindestens 2. 'so muss ich es mit einem Rückruf tun, aber ich bin mir nicht sicher, wie –

Verwandte Themen