typescript - Existuje spôsob, ako môžem zablokovať HTTP požiadavku v rámci Angular HTTP interceptora, kým iná požiadavka nebude úspešná?
Mám aplikáciu v Angulari, kde by sa mali API volania (R2, R3..) vykonávať s určitými hlavičkami. Dáta pre tieto hlavičky sa však získavajú z iného volania služby (R1). Takže musíme zablokovať ostatné požiadavky, kým R1 neskončí.
Odpoveď č. 1
RxJs Observer môže byť použitý v tomto prípade. R2 a R3 by mali byť zavolané, keď príde odpoveď z R1. Takže niekde prihláste odberateľa a zavolajte R2 a R3 pri odpovedi, ak príde hlavička. Zavolajte observer.next z odpovede R1.
Odpoveď č. 2
Urobil by som toto:
- urob R1 ako pozorovateľný z BehaviourSubject
- všetky volania R2, R3...RX, ktoré potrebujú tieto hlavičky, sa prihlásia na odber R1 a čakajú na dokončenie, potom pokračujú
R1 sa musí vykonať raz a multicastovať nasledujúci pre všetkých svojich pozorovateľov (R2, R3, ...) a BehaviourSubject musí prehrať posledný next() každému odberateľovi, ktorého treba upozorniť
Ak sú všetky vaše požiadavky pod touto požiadavkou (všetky požiadavky R závisia od týchto hlavičiek), je praktickejšie (samozrejme) použiť HttpInterceptor v kombinácii s BehaviourSubject. Tiež môžete zvážiť rozšírenie httpClient a prepojenie R1 s požiadavkou, ktorú sa chystáte vytvoriť. Všetko závisí od požiadaviek vášho projektu.
Dúfam, že to pomôže