/ / InvalidPipeArgument: '[Object Object]' für die Pipe 'AsyncPipe' - eckig, Firebase-Datenbank, beobachtbar

InvalidPipeArgument: '[Object Object]' für die Pipe 'AsyncPipe' - eckig, Firebase-Datenbank, beobachtbar

Im Service wie folgt deklariert:

public currentDBUserBS$: any;

constructor(private afDb: AngularFireDatabase){}

fetchUser(uid){
this.afDb.object(`users/${uid}`).valueChanges().subscribe((dUser) => {
if (dUser) {
this.currentDBUserBS$ = dUser;
}
});
}

Jetzt versuche, in der Vorlage zu verwenden

template: `<li *ngIf="(authService.currentDBUserBS$ | async)?.role=="admin""> Something </li>`

Der Fehlerstapel:

ERROR Error: InvalidPipeArgument: "[object Object]" for pipe "AsyncPipe"
at invalidPipeArgumentError (common.js:4219)
at AsyncPipe._selectStrategy (common.js:5630)
at AsyncPipe._subscribe (common.js:5612)
at AsyncPipe.transform (common.js:5586)
at Object.View_AppNavigatorComponent_0._co [as updateDirectives] (AppNavigatorComponent.html:40)
at Object.debugUpdateDirectives [as updateDirectives] (core.js:14339)
at checkAndUpdateView (core.js:13508)
at callViewAction (core.js:13858)
at execComponentViewsAction (core.js:13790)
at checkAndUpdateView (core.js:13514)

Antworten:

6 für die Antwort № 1

Du gibst currentDBUserBS$ das Objekt, das Sie von Firebase abrufen und nicht das Observable. Wenn du es so machen willst, musst du das entfernen | async in deiner Vorlage.

Sie könnten jedoch Folgendes tun:

fetchUser(uid){
this.currentDBUserBS$ = this.afDb.object(`users/${uid}`).valueChanges();
}

.valueChanges() gibt Ihnen eine Observable und wird automatisch aktualisiert, wenn ein neuer Wert ausgegeben oder ein vorhandener Wert geändert wird.


1 für die Antwort № 2

Sie versuchen, Array an Async-Pipe statt Observable zu übergeben. Entfernen Sie einfach die asynchrone Pipe, oder weisen Sie Observable CurrentDBUserBS $ zu.