О http.post не может быть

#angular #rxjs #observable

Вопрос:

Я пишу простую службу в Angular, но у нее нет триггера внутри, может кто-нибудь посоветовать :

 import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { BehaviorSubject } from 'rxjs';
import { map,  tap } from 'rxjs/operators';

import { User } from './user';
@Injectable({
  providedIn: 'root'
})
export class AuthService {
  
  private signinuser = new BehaviorSubject<User>(null);
  CurrentUser = this.signinuser.asObservable();
  
  constructor(private http: HttpClient) 
  {}

  signin (username : string, password :string) 
  {
    console.log(`Get username : ${username} - 1`);
    console.log(`Get password : ${password} - 2`);
    this.http.post<any>(`http://localhost:4000`, {"userid": username, "UserPassword": password})
        .pipe
        (
          tap( res => console.log('HTTP response here:', res)),
          map
          (
            
            data=>this.signinuser.next(data)
          ),
          tap(console.log)
         
        )
    this.signinuser.subscribe( getnewdata => { console.log(getnewdata) });
  }
  


}
 

когда я позвоню сюда.AuthService.вход («тест», «пароль»)
из другого компонента

Результат вывода показывает следующее :
Получить имя пользователя : тест — 1
Получить имя пользователя : пароль — 2
Значение пользователя для входа в систему : null

Спасибо

Комментарии:

1. Вы должны подписаться на наблюдаемое, чтобы вызвать вызов

2. Но приведенный ниже код , должен подписаться

Ответ №1:

Вы должны подписаться на свой пост-звонок.

В противном случае вызов не будет выполнен, и все операторы в канале не будут вызваны. См. предпоследнюю строку:

 this.http.post<any>(`http://localhost:4000`, {"userid": username, "UserPassword": password})
    .pipe
    (
      tap( res => console.log('HTTP response here:', res)),
      map
      (
        
        data=>this.signinuser.next(data)
      ),
      tap(console.log)
     
    ).subscribe();
this.signinuser.subscribe( getnewdata => { console.log(getnewdata) });