typescript - Angular: Abonelikten sonra hâlâ değeri alamıyorum


TS dosyamda bu fonksiyon var:

searchForUser() {
        this.userService.getUserByLastName(this.searchString)
            .subscribe(
                (data: User) => this.searchedUser = data
            );
        console.log('Firstname: ' + this.searchedUser.firstName);
        this.dataService.changeUser(this.searchedUser);
    }

Html dosyamda searchedUser'dan doğru değerleri alıyorum. Ancak console.log ve dataService'de almıyorum. Neden? İkinci bir arama yaptığımda önceki aramadan değerleri alıyorum.

Cevap #1

Bu bir zamanlama sorunu, ihtiyacınız olan değere erişmek için yanıt gerektiren tüm işlemleri abonelik geri çağrısına taşıyın.

public searchForUser(): void
{
    this.userService.getUserByLastName(this.searchString).subscribe((data: User) => 
    {
        this.searchedUser = data;
        console.log('Firstname: ' + this.searchedUser.firstName);
        this.dataService.changeUser(this.searchedUser);
    });         
}

Bu hatalar, abonelikte tanımlanmadan önce this.searchedUser'a erişmeye çalıştığınız için meydana geliyor.

Cevap #2

hareket etmek

console.log('Firstname: ' + this.searchedUser.firstName);
this.dataService.changeUser(this.searchedUser);

subscribe içinde:

searchForUser() {
  this.userService.getUserByLastName(this.searchString)
    .subscribe((data: User) => {
      this.searchedUser = data;
      console.log('Firstname: ' + this.searchedUser.firstName);
      this.dataService.changeUser(this.searchedUser);
     });
 }

Ayrıca açıklama için cevabımı burada da kontrol edebilirsiniz: https://stackoverflow.com/a/55726693/6713046.