У меня есть к примеру 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);
}