рдХреЛрдгреАрдп рдореЗрдВ HTTP рдЕрдиреБрд░реЛрдз рдХреЛ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛

рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рд╕рдВрдЧрдарди рд▓рдЧрднрдЧ рдХрд┐рд╕реА рдПрдХ рдкреГрд╖реНрда рдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдЖрдзрд╛рд░ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рднреА рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдмреИрдХрдПрдВрдб рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИред

рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рд░реНрд╡рд░ рд╕реЗ HTTP рдЕрдиреБрд░реЛрдз рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЕрдиреБрд░реЛрдз рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЖрдкрдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде 200 рдХрд┐рд▓реЛрдореАрдЯрд░ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рдХреА рдЧрддрд┐ рд╕реЗ рджреЗрд╢ рднрд░ рдореЗрдВ рдпрд╛рддреНрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЯреНрд░реЗрди рдореЗрдВ рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз, рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЯреНрд░реЗрди рд╕реБрд░рдВрдЧ рдореЗрдВ рдЬрд╛ рдЧрд┐рд░реЗ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдПрдХ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрд╛рдзрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдкрд░ "рдкрд╣реБрдВрдЪ" рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЯреНрд░реЗрди рдХреЗ рд╕реБрд░рдВрдЧ рд╕реЗ рдирд┐рдХрд▓рдиреЗ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд╣рд╛рд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреЗрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдкреГрд╖реНрда рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рдЦреЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрд╕рдиреЗ рдлрд╝реЙрд░реНрдо рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдерд╛ред

рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рд╕рд╛рдордВрдЬрд╕реНрдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдиреБрд░реЛрдз рдЕрд╕рдлрд▓ рдерд╛, рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдЕрдиреБрд░реВрдк рдЕрдзрд┐рд╕реВрдЪрдирд╛ рджрд┐рдЦрд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╡рд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред



рд╕рд╛рдордЧреНрд░реА, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрдгреАрдп-рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЕрд╕рдлрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИред

рдмрд╛рд░-рдмрд╛рд░ рдЕрд╕рдлрд▓ рдЕрдиреБрд░реЛрдз


рдЖрдЗрдП рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ рдЬреЛ рдПрдХ рдЯреНрд░реЗрди рд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреА рд╣реИред рд╣рдо рдПрдХ рдмреИрдХрдПрдВрдб рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдкрд╣рд▓реЗ рддреАрди рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рджреМрд░рд╛рди рдЕрдиреБрд░реЛрдз рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЪреМрдереЗ рдкреНрд░рдпрд╛рд╕ рд╕реЗ рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдЖрдорддреМрд░ рдкрд░, рдХреЛрдгреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, HttpClient рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмреИрдХрдПрдВрдб рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

 import {Injectable} from '@angular/core'; import {HttpClient} from '@angular/common/http'; import {EMPTY, Observable} from 'rxjs'; import {catchError} from 'rxjs/operators'; @Injectable() export class GreetingService {  private GREET_ENDPOINT = 'http://localhost:3000';  constructor(private httpClient: HttpClient) {  }  greet(): Observable<string> {    return this.httpClient.get<string>(`${this.GREET_ENDPOINT}/greet`).pipe(      catchError(() => {        //           return EMPTY;      })    );  } } 

рдпрд╣рд╛рдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИред рд╣рдо рдХреЛрдгреАрдп HttpClient рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреНрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд░рд▓ GET рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА Observable (рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ) рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХреЛрдб, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛, рдХрд╣рддреЗ рд╣реИрдВ: "рдПрдХ рддреНрд░реБрдЯрд┐ рдереА, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВред"

рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕ рддрд░рд╣ рд╕реЗ HTTP рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рдЕрдиреБрд░реЛрдз рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рдпрд╛ рддреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрд╛ рдЕрд╕рдлрд▓ рд╣реИред

рдпрджрд┐ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ /greet рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ рдпрд╛ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рддрд╛ /greet , рддреЛ рдЕрдиреБрд░реЛрдз рдХреЛ рдХреИрд╕реЗ рджреЛрд╣рд░рд╛рдПрдВ? рд╢рд╛рдпрдж рдПрдХ рдЙрдкрдпреБрдХреНрдд RxJS рдмрдпрд╛рди рд╣реИ? рдмреЗрд╢рдХ рдпрд╣ рдореМрдЬреВрдж рд╣реИред RxJS рдХреЗ рдкрд╛рд╕ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рд╣реИрдВред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдзреНрдпрд╛рди рдореЗрдВ рдЖ рд╕рдХрддреА рд╣реИ рд╡рд╣ рд╣реИ retry ред рдЖрдЗрдП рдЗрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗрдЦреЗрдВ: тАЬрд░рд┐рдЯрд░реНрди рдЕ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдЬреЛ error рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдУрд░рд┐рдЬрдирд▓ рдСрдмреНрдЬрд░реНрд╡рдмрд▓ рдХреЛ рдкреНрд▓реЗ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдореВрд▓ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЙрд▓ error , рддреЛ рдпрд╣ рд╡рд┐рдзрд┐, рддреНрд░реБрдЯрд┐ рдХреЛ рдлреИрд▓рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореВрд▓ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рджреЗрдЧреАред

рд░реА-рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ count рддрдХ рд╕реАрдорд┐рдд рд╣реИ (рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ)ред "

retry рдмрд╣реБрдд рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рддреЛ рдЪрд▓реЛ рдЗрд╕реЗ рд╣рдорд╛рд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рддреЗ рд╣реИрдВред

 import {Injectable} from '@angular/core'; import {HttpClient} from '@angular/common/http'; import {EMPTY, Observable} from 'rxjs'; import {catchError, retry, shareReplay} from 'rxjs/operators'; @Injectable() export class GreetingService {  private GREET_ENDPOINT = 'http://localhost:3000';  constructor(private httpClient: HttpClient) {  }  greet(): Observable<string> {    return this.httpClient.get<string>(`${this.GREET_ENDPOINT}/greet`).pipe(      retry(3),      catchError(() => {        //           return EMPTY;      }),      shareReplay()    );  } } 

рд╣рдордиреЗ retry рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЖрд╡реЗрджрди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдПрдХ рдмрдбрд╝реА GIF рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдХреНрд░реАрди рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм рдХреЛ рджрд┐рдЦрд╛рддреА рд╣реИред рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рджреЗрдЦрдиреЗ рдХреЛ рдорд┐рд▓реЗрдВрдЧреЗред

рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдЬрдм PING THE SERVER рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмреИрдХрдПрдВрдб рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рдкрд╣рд▓реЗ рддреАрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдПрдХ рдЪреМрдерд╛ рдЕрдиреБрд░реЛрдз рдЖрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред

рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЯреВрд▓ рдЯреИрдм рдкрд░, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ retry рдЙрд╕реЗ рд╕реМрдВрдкреЗ рдЧрдП рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддреАрди рдмрд╛рд░ рдЕрд╕рдлрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рдкреНрд░рдпрд╛рд╕ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИ, рдкреЗрдЬ рдкрд░ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

рдпрд╣ рд╕рдм рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдЕрдм рдЖрд╡реЗрджрди рд╡рд┐рдлрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЕрднреА рднреА рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдм рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рджреЛрд╣рд░рд╛рдП рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрд╕рдлрд▓ рд╣реИрдВред рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрд╣реБрдд рд▓рд╛рдн рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдЬрдм рдЯреНрд░реЗрди рд╕реБрд░рдВрдЧ рдореЗрдВ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЦреЛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд┐рдлрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╡рд┐рд▓рдВрдмрд┐рдд рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐


рдЬреЛ рдЯреНрд░реЗрди рд╕реБрд░рдВрдЧ рдореЗрдВ рдЬрд╛ рдЧрд┐рд░реА рд╡рд╣ рдЙрд╕реЗ рддреБрд░рдВрдд рдирд╣реАрдВ рдЫреЛрдбрд╝рддреАред рд╡рд╣ рдХреБрдЫ рд╕рдордп рд╡рд╣рд╛рдВ рдмрд┐рддрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрд╕ рдЕрд╡рдзрд┐ рдХреЛ "рд╕реНрдЯреНрд░реЗрдЪ" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рдмрд╛рд░-рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рд░рд┐рдЯреНрд░реАрдЯ рдХреЛ рдбрд┐рдлрд╛рдЗрди рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ retry рдСрдкрд░реЗрдЯрд░ рдХреА рдХреНрд╖рдорддрд╛рдПрдВ рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдлрд┐рд░ рд╕реЗ рдЖрд░рдПрдХреНрд╕рдЬреЗрдПрд╕ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред

рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ retryWhen рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ, рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: тАЬрдПрдХ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рд░рд┐рдЯрд░реНрди рдЬреЛ рдореВрд▓ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЛ error рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдирд┐рднрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдореВрд▓ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЙрд▓ error , рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдереНрд░реЛрдмреЗрдмрд▓ рдХреЛ рдлреЗрдВрдХ рджреЗрдЧреА, рдЬреЛ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдиреА, рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ notifier рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ред рдпрджрд┐ рдпрд╣ рдЕрд╡рд▓реЛрдХрдиреАрдп complete рдпрд╛ error рдХрд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдмрд╛рд▓ рд╕рджрд╕реНрдпрддрд╛ рдкрд░ complete рдпрд╛ error рдХрд╣реЗрдЧреАред рдЕрдиреНрдпрдерд╛, рдпрд╣ рд╡рд┐рдзрд┐ рдореВрд▓ рдЕрд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдЧреАред "

рд╣рд╛рдВ, рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХ рд╕реБрд▓рдн рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред

retryWhen рдПрдХ рдХреЙрд▓рдмреИрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ retryWhen рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИред рд▓реМрдЯреЗ рд╣реБрдП рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ retryWhen рдСрдкрд░реЗрдЯрд░ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред рдЕрд░реНрдерд╛рддреН, рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм retryWhen рдСрдкрд░реЗрдЯрд░ retryWhen :

  • рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ рдЕрдЧрд░ рд▓реМрдЯреЗ рдСрдмреНрдЬрд░реНрд╡рдмрд▓ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред
  • рдпрджрд┐ рдкреНрд░реЗрдХреНрд╖рд┐рдд рд░рд┐рдкреЛрд░реНрдЯ рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреА рд╣реИ рддреЛ рдпрд╣ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИред
  • рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрдм рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реМрдЯрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореВрд▓ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ

рдХреЙрд▓рдмреИрдХ рдХреЗрд╡рд▓ рддрднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдореВрд▓ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред

рдЕрдм рд╣рдо рдЗрд╕ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ RxJS retryWhen рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЕрд╕рдлрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╡рд┐рд▓рдВрдмрд┐рдд retryWhen рддрдВрддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 retryWhen((errors: Observable<any>) => errors.pipe(    delay(delayMs),    mergeMap(error => retries-- > 0 ? of(error) : throwError(getErrorMessage(maxEntry))    )) ) 

рдпрджрд┐ рдореВрд▓ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓, рдЬреЛ рд╣рдорд╛рд░рд╛ HTTP рдЕрдиреБрд░реЛрдз рд╣реИ, рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ retryWhen рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ retryWhen ред рдХреЙрд▓рдмреИрдХ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрд╕ рддреНрд░реБрдЯрд┐ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ рдЬреЛ рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдиреАред рд╣рдо errors рдХреЛ рджреВрд░ рдХрд░рддреЗ errors , рд░рд┐рдЯреНрд░реАрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдирдпрд╛ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред

retryWhen рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ retryWhen , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ retryWhen , рдЕрдиреБрд░реЛрдз рдХреЛ retryWhen ред рдпрджрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрдИ рдмрд╛рд░ рдЕрд╕рдлрд▓ рд╣реЛрддреА рд╣реИ рдФрд░ retries рдЪрд░ рдХрд╛ рдорд╛рди 0 рддрдХ рдШрдЯ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдЕрджреНрднреБрдд! рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ retry рдСрдкрд░реЗрдЯрд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдо рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рд╡реЗрд░рд┐рдПрдмрд▓ retries рд╕реЗ рдХреИрд╕реЗ retries ? рдЗрд╕ рдЪрд░ рдореЗрдВ рд╡рд┐рдлрд▓ рдЕрдиреБрд░реЛрдз рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдкреНрд░рдгрд╛рд▓реА рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣реИред рд╡рд╣ рдХрд╣рд╛рдВ рдШреЛрд╖рд┐рдд рд╣реИ? рд╕реНрдерд┐рддрд┐ рдХрдм рд░реАрд╕реЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИ? рд░рд╛рдЬреНрдп рдХреЛ рдзрд╛рд░рд╛ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рдирд╣реАрдВред

Reat рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рд▓рдВрдмрд┐рдд рдХрдерди рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрдВ


рд╣рдо рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ RxJS рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдХрд░ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ RxJS рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╣реИрдВред рдХрд┐рд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░ рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рд╣реИред

рд╣рдорд╛рд░рд╛ рдСрдкрд░реЗрдЯрд░ рдореМрдЬреВрджрд╛ RxJS рдСрдкрд░реЗрдЯрд░реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдирддреАрдЬрддрди, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, RxJs рдСрдкрд░реЗрдЯрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ:

 const customOperator = (src: Observable<A>) => Observable<B> 

рдпрд╣ рдХрдерди рдореВрд▓ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдФрд░ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдСрдкрд░реЗрдЯрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдиреА рдмрд╛рд░ рдмрд╛рд░-рдмрд╛рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд┐рддрдиреА рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдХреЛ рдлрд╝реИрдХреНрдЯрд░реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд▓рдВрдм ( delayMs рдмреАрдЪ рд╡рд┐рд▓рдВрдм) рдФрд░ maxRetry ( рджреЛрд╣рд░рд╛рд╡ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛)ред

 const customOperator = (delayMs: number, maxRetry: number) => {   return (src: Observable<A>) => Observable<B> } 

рдпрджрд┐ рдЖрдк рдПрдХ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдореМрдЬреВрджрд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ Observable рдХрдХреНрд╖рд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдФрд░ lift рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ ред

рддреЛ, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдЗрдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ RxJs рдСрдкрд░реЗрдЯрд░ рд▓рд┐рдЦреЗрдВред

 import {Observable, of, throwError} from 'rxjs'; import {delay, mergeMap, retryWhen} from 'rxjs/operators'; const getErrorMessage = (maxRetry: number) =>  `Tried to load Resource over XHR for ${maxRetry} times without success. Giving up`; const DEFAULT_MAX_RETRIES = 5; export function delayedRetry(delayMs: number, maxRetry = DEFAULT_MAX_RETRIES) {  let retries = maxRetry;  return (src: Observable<any>) =>    src.pipe(      retryWhen((errors: Observable<any>) => errors.pipe(        delay(delayMs),        mergeMap(error => retries-- > 0 ? of(error) : throwError(getErrorMessage(maxRetry))        ))      )    ); } 

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ред рдЕрдм рд╣рдо рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред HTTP рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

 return this.httpClient.get<string>(`${this.GREET_ENDPOINT}/greet`).pipe(        delayedRetry(1000, 3),        catchError(error => {            console.log(error);            //               return EMPTY;        }),        shareReplay()    ); 

рд╣рдордиреЗ delayedRetry рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЪреЗрди рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ 1000 рдФрд░ 3 рдирдВрдмрд░ рджрд┐рдПред рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдмрд╛рд░-рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмреАрдЪ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рджреЗрд░реА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдирдпрд╛ рдСрдкрд░реЗрдЯрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд░-рдмрд╛рд░ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рджреЗрд░реА рд╣реЛ рд░рд╣реА рд╣реИред рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕рд╣реА рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдВрдбреЛ рдореЗрдВ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рдШрд╛рддрд╛рдВрдХ рдирд┐рд╡реЗрджрди


рдЪрд▓реЛ рд╡рд┐рдлрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╡рд┐рд▓рдВрдмрд┐рдд рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ, рд╣рдордиреЗ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рд╕рдордп рдкрд░ рджреЛрд╣рд░рд╛рдП рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рдХреАред

рдпрд╣рд╛рдВ рд╣рдо рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд╛рдж рджреЗрд░реА рдХреЛ рдХреИрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдПред рдЕрдиреБрд░реЛрдз рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рджреЛ рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж, рддреАрд╕рд░рд╛ рддреАрди рдХреЗ рдмрд╛рджред

рдПрдХ рдирдпрд╛ рдХрдерди рдмрдирд╛рдПрдБ, retryWithBackoff , рдЬреЛ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

 import {Observable, of, throwError} from 'rxjs'; import {delay, mergeMap, retryWhen} from 'rxjs/operators'; const getErrorMessage = (maxRetry: number) =>  `Tried to load Resource over XHR for ${maxRetry} times without success. Giving up.`; const DEFAULT_MAX_RETRIES = 5; const DEFAULT_BACKOFF = 1000; export function retryWithBackoff(delayMs: number, maxRetry = DEFAULT_MAX_RETRIES, backoffMs = DEFAULT_BACKOFF) {  let retries = maxRetry;  return (src: Observable<any>) =>    src.pipe(      retryWhen((errors: Observable<any>) => errors.pipe(        mergeMap(error => {            if (retries-- > 0) {              const backoffTime = delayMs + (maxRetry - retries) * backoffMs;              return of(error).pipe(delay(backoffTime));            }            return throwError(getErrorMessage(maxRetry));          }        )))); } 

рдпрджрд┐ рдЖрдк рдЖрд╡реЗрджрди рдореЗрдВ рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдирдП рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд╛рдж рджреЛрд╣рд░рд╛рдпрд╛ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреБрд░реЛрдз рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЬрдм рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕рд╣реА рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдВрдбреЛ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо


рдмрд╛рд░-рдмрд╛рд░ рд╡рд┐рдлрд▓ HTTP рдЕрдиреБрд░реЛрдз рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╕рдордп рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдкрддреЗ рдпреБрдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЬреНрдпрд╛рджрд╛рддрд░ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ, RxJs рд░рд┐рдЯреНрд░реА retry рд╡рд┐рдлрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░рд┐рдЯреНрд░реА рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред retryWhen рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рд╡рд┐рд▓рдВрдмрд┐рдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдпреЛрдЬрдирд╛ рдпрд╛ рддреЗрдЬреА рд╕реЗ рд╡рд┐рд▓рдВрдмрд┐рдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

RxJS рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдирдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣рд╛рдВ рд╡рд╣ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдЖрдк HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

Source: https://habr.com/ru/post/hi459302/


All Articles