Ich fand einige Implementierung von Auth Guards, die take(1)
verwendet. Auf meinem Projekt habe ich first()
verwendet, um meine Bedürfnisse zu befriedigen. Funktioniert es genauso? Oder einer von ihnen könnte Vorteile oder so haben.Angular 2 mit RxJS - Take (1) vs ersten()
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/first';
import { Observable } from 'rxjs/Observable';
import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { AngularFire } from 'angularfire2';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private angularFire: AngularFire, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
return this.angularFire.auth.map(
(auth) => {
if (auth) {
this.router.navigate(['/dashboard']);
return false;
} else {
return true;
}
}
).first(); // Just change this to .take(1)
}
}
Wie Anmerkung, ich habe nicht gesagt, dass 'first()' und 'nehmen()' im Allgemeinen gleich sind, was ich denke, liegt auf der Hand, nur dass 'erstes()' und 'take (1)' sind gleich. Ich bin mir nicht sicher aus Ihrer Antwort, wenn Sie denken, dass es noch einen Unterschied gibt? –
@ GünterZöchbauer Eigentlich ist ihr Verhalten anders. Wenn die Quelle nichts ausgibt und dann 'first()' sendet, wird eine Fehlermeldung gesendet, während 'take (1)' einfach nichts ausgibt. – martin
Ok, jetzt verstehe ich.Vielen Dank :) –