javascript - Rxjs מחכה לביצוע הבקשה של האינטרוול הקודם לפני ההתקדמות
מקרה שימוש: לקרוא לנקודת קצה כל 3 דקות שתעדכן את מצב השירות מסוים באפליקציה.
הקוד הנוכחי שלי:
interval(180000)
.subscribe(() => this.doRequest
.pipe(catchError(() => {
this.applicationFlag = false;
return EMPTY;
}))
.subscribe(result => this.applicationFlag = result));הבעיה הנוכחית שלי היא שלפעמים הבקשה לאינטרוול הקודם עדיין לא הושלמה אבל גם הבקשה לאינטרוול הבא הייתה מבצעת בקשה.
האם יש דרך לסמן להמתין לבקשה הקודמת או לא לבצע את האינטרוול כאשר הבקשה הקודמת עדיין לא הושלמה?
תשובה #1
כאשר יש לך subscribe אחד בתוך subscribe אחר, אין דרך שהשרשרת החיצונית תוכל להתעדכן שהשרשרת הפנימית הסתיימה. אתה צריך לארגן מחדש את השרשרת שלך ולהשתמש באופרטורים כמו concatMap, mergeMap או switchMap. לדוגמה כמו הבא:
interval(180000)
.pipe(
concatMap(() => this.doRequest.pipe(
catchError(() => {
this.applicationFlag = false;
return EMPTY;
}),
),
)
.subscribe();
