javascript - Kan inte läsa egenskapen av undefined när man anropar funktionen med setInterval i Angular


När man anropar en funktion utan problem, men när man anropar den i setInterval så fortsätter den att anropas varje sekund och det ger mig felet: kan inte läsa egenskapen av undefined på tjänsten!

 constructor(private route: ActivatedRoute,private 
 conversationService:ConversationService) {
 }


 ngOnInit() {
 this.sender = this.route.snapshot.paramMap.get("username");
 this.receiver = sessionStorage.getItem("username");
 setInterval(
 function()
 { 
   this.conversationService.
   getTheConversation(this.receiver,this.sender).subscribe(
     data=>this.result=data)
   },1000);
 } 

fel: FEL TypeError: Kan inte läsa egenskapen 'getTheConversation' av undefined

Svar #1

Försök

 ngOnInit() {
 this.sender = this.route.snapshot.paramMap.get("username");
 this.receiver = sessionStorage.getItem("username");
 setInterval(()=>
 { 
   this.conversationService.
   getTheConversation(this.receiver,this.sender).subscribe(
     data=>this.result=data)
   },1000);
 } 

använd fat arrow => för att behålla this-omfånget. När du deklarerar en ny function, skapar den sitt eget this.

Svar #2

Funktionen setInterval hänvisar till ett annat this-objekt,

Det korrekta sättet att göra detta skulle vara,

const newThis = this;
setInterval(
 function()
 { 
   newThis.conversationService.
   getTheConversation(newThis.receiver,newThis.sender).subscribe(
     data=>newThis.result=data)
   },1000);

Följ länken för fler andra sätt att göra det https://stackoverflow.com/a/7890978/11914056

Relaterade artiklar