• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

return w Angular

Object Storage Arubacloud
0 głosów
226 wizyt
pytanie zadane 20 lutego 2021 w JavaScript przez Szyszka Gaduła (3,490 p.)

Witam. Mam takie coś w Angularze:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { NgForm } from '@angular/forms';

@Injectable()
export class AccountService {

  constructor(private http: HttpClient) { }

  logIn(form: NgForm): boolean {
    const credentials = form.value as JSON;
    let bool = false;

    console.log(credentials);
    this.http.post('https://localhost:44305/api/auth/login', credentials)
      .subscribe(data => {
        const token = (data as any).token;
        localStorage.setItem('jwt', token);
        bool = true;
      }, err => {
        bool = false;
      });
    return bool;
  }
}

Dlaczego to zawsze zwraca mi false, nawet jeśli ten bool ustawię na true? Dzięki za odpowiedzi.

2 odpowiedzi

+2 głosów
odpowiedź 20 lutego 2021 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 20 lutego 2021 przez Szyszka
 
Najlepsza

Wartość true ustawiasz przy obsłudze promisa, a on wykona się później niż return false z metody logIn. Zwróć z tej metody całe zapytanie http.post (zapisz return w 5 linijce) - dodatkowo zmień typ zwracanej wartości z tej metody z boolean na Promise<boolean>. A jeśli logIn wołasz w templatce, to możesz się wspomóc async pipe

1
komentarz 20 lutego 2021 przez Szyszka Gaduła (3,490 p.)

Dzięki, zrobiłem tak:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { NgForm } from '@angular/forms';
import { Observable } from 'rxjs';

@Injectable()
export class AccountService {

  constructor(private http: HttpClient) { }

  logIn(form: NgForm): Observable<object> {
    const credentials = form.value as JSON;
    return this.http.post('https://localhost:44305/api/auth/login', credentials);
  }
}

A potem tak:

import { Component } from '@angular/core';
import { NgForm } from '@angular/forms';
import { AccountService } from './services/account.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  providers: [AccountService]
})
export class AppComponent {
  title = 'JWT';

  constructor(private accService: AccountService) {

  }

  logIn(form: NgForm): void {
    const logged = this.accService.logIn(form);

    logged.subscribe(data => {
      const token = (data as any).token;
      localStorage.setItem('jwt', token);
      console.log('tak');
    }, err => {
      console.log('nie');
    });
  }
}

I wszystko działa. Wielkie dzięki :)

0 głosów
odpowiedź 20 lutego 2021 przez maciej.tokarz Nałogowiec (27,280 p.)

Najprościej rzecz ujmując, zanim otrzymasz rezultat tego POST-a zadziała Twój:

return bool;

M.

Podobne pytania

+2 głosów
1 odpowiedź 400 wizyt
pytanie zadane 5 maja 2023 w JavaScript przez mm Użytkownik (890 p.)
+2 głosów
1 odpowiedź 231 wizyt
pytanie zadane 2 maja 2023 w JavaScript przez mm Użytkownik (890 p.)
+2 głosów
1 odpowiedź 243 wizyt
pytanie zadane 23 kwietnia 2023 w JavaScript przez mm Użytkownik (890 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...