Я знаю, что это было в течение 6 месяцев, однако ответ показывает в Google, что «добавление месяцев в python», если вы добавляете один месяц:
import calendar
date = datetime.date.today() //Or your date
datetime.timedelta(days=calendar.monthrange(date.year,date.month)[1])
, это будет считать дни в текущем месяце и добавьте их к текущей дате, используя 365/12, объявление 1/12 года может вызвать проблемы в течение коротких / длинных месяцев, если вы повторяете дату.
Вероятно, несколько синтаксических ошибок в этом, потому что я пишу с мобильного, но это должно помочь вам начать
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (!request.url.startsWith('/api')) {
return next.handle(request)
}
const cloned = request.clone()
return next.handle(request)
.do((event: HttpEvent<any>) =>
return from(this.sessionService.refresh())
.pipe(map(() => next.handle(cloned)))
}), (err: any) => {
if (err instanceof HttpResponse) {
if(err.status === 401){
return throwError(error);
}
}
)
}
Ответ заключался в использовании switctMap
, а не map
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>
{
if (!request.url.startsWith('/api')) {
return next.handle(request)
}
const cloned = request.clone()
return next.handle(request)
.pipe(
catchError((error: any) => {
if (error.status !== 401) {
return throwError(error)
}
return from(this.sessionService.refresh())
.pipe(switchMap(() => next.handle(cloned)))
})
)
}
Однако я выбрал альтернативный подход, при котором я проверяю, есть ли у меня сеанс до того, как произойдет запрос, добавляя действие обновления если требуется.
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (
!request.url.startsWith('/api') ||
this.sessionService.isValid
) {
return next.handle(request)
}
return from(this.sessionService.refresh())
.pipe(switchMap(() => next.handle(request)))
}