Дождитесь двух параллельных запросов (каждый может потерпеть неудачу) и продолжите выполнение - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу отправить два запроса GET в PARALLEL (это важно), чтобы получить user и project, а затем, когда у меня есть оба, я хочу отправить третий запрос, чтобы проверить, есть ли у меня доступ или нет, а затем загрузить здания и выполнить дальнейшую обработку - следующим образом

forkJoin([
    this.myService.getProject(projectId),  // gives observable
    this.myService.getUser(userId),        // gives observable
]).subscribe(async result => {
    this.project =result[0];
    this.user = result[1];

    //AT THIS POINT I would like to have this.project/user=null if request fail

    if(this.user && this.project) {
        let access = this.myService.hasAccess(this.project, this.user).toPromise()
        this.showAccess(access);
    } else {
        this.showWarning();
    } 

    this.buildings = this.myService.getBuildings().toPromise();

    if (this.user) { ... }    // further processing
    if (this.project) { ... } // further processing
});  

Но есть следующая проблема: если запрос getProject или getUser завершится неудачно, будет выполнен код в разделе подписки новее (например, запрос getBuildings будет новее) отправить) - я просто хочу ВСЕГДА выполнять код в этом теле подписки - в случае сбоя getProject я просто хочу иметь this.project = null (то же самое с пользователем).

Вопрос : Как это сделать?

1 Ответ

1 голос
/ 20 апреля 2020

Вы можете перехватить ошибок и сопоставить их с null

forkJoin([
  this.myService.getProject(projectId).pipe(
    catchError(() => of(null))
  ),
  this.myService.getUser(userId).pipe(
    catchError(() => of(null))
  ),
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...