@sdgroup14

Как сделать очередь http get/post запросов Angular 2+?

У меня есть к примеру 25 разных post или get.... Как мне сделать так, чтобы 2рой запрос не начался пока 1 не завершится... 1 завершился начался 2. пока 2рой запрос не завершится не начинать 3тий и т.д. У меня обязательно нужно сделать такое условие. Во первых из за рефреш токена... А во вторых логика предполагает такое. Ниже скинул шаблон http шаблон error и пример get/post у меня еще таких штук 40 так что шаблонная функция обязательно нужна...

devicesTypes = new Subject<any>();
  usersAccountList = new Subject<any>();
  userDevice = new Subject<any>();
  userDeviceNotification = new Subject<any>();
  allCategories = new Subject<any>();

// и т.д.....

  httpGetTemplate(param_url?, target?) {
    const httpHandler = () => {
      const $params = param_url;
      const $target = target;
      const options = {
        headers: new HttpHeaders().set('Authorization', 'Bearer ' + localStorage.getItem('token'))
      };
      return this.http.get(this.apiURL + $params, options).subscribe((_data: any) => {
        // console.log('new http :', _data);
        $target.next(_data.result);
      }, _error => {
        // console.log('new _error :', _error);
        this.errorsHandler(_error, httpHandler);
      });
    };
    httpHandler();
  }

  errorsHandler(_err, _httpHandler) {
    if (_err.status === 401) {
      const optionsSimple = {
        headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
      };

      const refresh = new URLSearchParams();
      refresh.set('refresh_token', localStorage.getItem('refresh_token'));
      this.http.post('http://185.156.41.135/api/web/v1/users/refresh-token', refresh.toString(), optionsSimple).subscribe((data: any) => {
        localStorage.setItem('token', data.result.auth_token);
        localStorage.setItem('refresh_token', data.result.refresh_token);
        _httpHandler();

      }, __err => {
        if (__err.status === 400) {
          localStorage.removeItem('token');
          localStorage.removeItem('refresh_token');
          this.router.navigate(['/login']);
        }
      });
    } else if (_err.status === 400) {
      // localStorage.removeItem('token');
      // localStorage.removeItem('refresh_token');
      // this.router.navigate(['/login']);
    }
  }

  getleftWidgetCategories() {
    return this.httpGetTemplate('/device-info/devices', this.allCategories);
  }

  getDevicesTypes() {
    return this.httpGetTemplate('/devices/get-device-models', this.devicesTypes);
  }


  getUsersAccountList() {
    return this.httpGetTemplate('/users/list', this.usersAccountList);
  }

  getUserDevice() {
    return this.httpGetTemplate('/devices/get-device-user', this.userDevice);
  }

  getUserDeviceNotification(id) {
    return this.httpGetTemplate('/devices/settings-event?id=' + id, this.userDeviceNotification);
  }

  getDeviceUserAcccess(user_id, device_id) {
    return this.httpGetTemplate('/devices/get-device-user-acccess?user_id=' + user_id + '&device_id=' + device_id, this.deviceUserAcccess);
  }
  • Вопрос задан
  • 332 просмотра
Решения вопроса 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
Как мне сделать так, чтобы 2рой запрос не начался пока 1 не завершится... 1 завершился начался 2. пока 2рой запрос не завершится не начинать 3тий и т.д.

switchMap
или concatMap
зависит от конкретики вашей задачи
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы