Я хочу сделать http-вызов для этого я использую эффект от rxjs. Теперь моя проблема в том, что я хочу отправить еще одно действие, например { type: LoaderActions.LOADER_START }
, перед вызовом http. Таким образом, пользователь может видеть экран загрузки, пока запрашивается Http-вызов, и после завершения запроса я хочу отправить еще одно действие { type: LoaderActions.LOADER_END }
.
Как мне добиться этого с помощью операторов rxjs? Я очень озадачен тем, когда использовать какой оператор в rxjs.
auth.effects.ts
import { Injectable } from '@angular/core';
import { Observable, of, concat } from 'rxjs';
import { Action, Store } from '@ngrx/store';
import { Actions, Effect, ofType } from '@ngrx/effects';
import * as AuthActions from './auth.actions';
import * as LoaderActions from '../../loader/store/loader.actions';
import {
map,
mergeMap,
switchMap,
debounce,
debounceTime,
tap,
startWith
} from 'rxjs/operators';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Router } from '@angular/router';
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json; charset=utf-8'
})
};
@Injectable()
export class AuthEffects {
@Effect()
signInAction$: Observable<Action> = this.actions$.pipe(
ofType(AuthActions.TRY_SIGN_IN),
mergeMap(action =>
this.http
.post(
'http://localhost:8081/auth',
JSON.stringify({
username: action['username'],
password: action['password']
}),
httpOptions
)
.pipe(
map(data => {
if (data['message'] === 'successs') {
this.router.navigate(['/todo']);
return { type: AuthActions.SET_AUTH_FLAG, payload: true };
} else {
return { type: AuthActions.SET_AUTH_FLAG, payload: false };
}
})
)
)
);
constructor(
private actions$: Actions,
private http: HttpClient,
private router: Router
) {}
}