javascript - Er der en måde at tilmelde sig igen efter at have afmeldt RxJS?
Her er et eksempel på kode, der abonnerer på en Http-anmodning og annullerer den ved klik med musen på siden. Jeg vil gerne abonnere igen, hvis jeg klikker igen.
Hvordan kan jeg skifte abonnement? FIDDLE
export class AboutComponent implements OnInit {
constructor(private http:HttpClient){
}
flag=true;
documentclick = fromEvent(document, 'click');
private data = {
name: 'Samurai',
profession: 'Developer'
};
ngOnInit(){
let subscription:Subscription = this.getGoogle() )
.subscribe((res)=> {
console.log(res);
})
this.documentclick.subscribe( e=>{
if(this.flag){
subscription.unsubscribe();
}
else{
subscription = this.getGoogle().subscribe((res)=> {
console.log(res);
});
}
this.flag != this.flag;
});
}
getGoogle(): Observable<any> {
return this.http.get( 'https://jsonplaceholder.typicode.com/todos/1').pipe ( delay( 2000 ) )
}
}
Med ovenstående kode er jeg i stand til at annullere anmodningen, hvis jeg klikker på siden inden for 2 sekunder. Men jeg er ikke i stand til at tilmelde mig igen ved at klikke igen.
Det ville også være fantastisk, hvis nogen kunne fortælle mig, om jeg virkelig annullerer HTTP-forespørgslen med unsubscribe()? Eller er det bare en illusion? Vil forespørgslen ramme serveren, hvis jeg afmelder inden for 2 sekunder?
Svar #1
Din kode har en logisk fejl, bare en stavefejl, tror jeg.
this.flag != this.flag;
Du mente sandsynligvis
this.flag = !this.flag;
Forresten (uden relation til dit problem) er din metode til at få dokumentklik en ikke-angular metode, og du kan støde på problemer med, at siden ikke opdateres. Overvej i stedet at bruge en HostListener:
@HostListener('document:click', ['$event'])
clicked(event) {
..
}
Afmeldelse af HTTP-anmodningen bør annullere anmodningen. Du har dog ingen garanti for at vide, om anmodningen faktisk nåede serveren eller ej - serveren kan allerede have svaret på det tidspunkt, hvor du afmeldte.
Her er en ryddet-up stackblitz: https://stackblitz.com/edit/angular-fzlzcf
