Я в большой суматохе. Я пытаюсь заблокировать свой код в JavaScript (да, я знаю, что это невозможно).
Я использую async / await для выполнения некоторой работы, и после этого я хочу вернуть значение.
Это код
import {Injectable, Injector} from '@angular/core';
import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest} from '@angular/common/http';
import {Observable} from 'rxjs/Observable';
import {AuthService} from '../services/auth.service';
export const InterceptorSkipHeader = 'X-Skip-Interceptor';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private injector: Injector) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
/* const auth = this.injector.get(AuthService);
if (req.headers.has(InterceptorSkipHeader)) {
const headers = req.headers.delete(InterceptorSkipHeader);
return next.handle(req.clone({headers}));
}
auth.getToken(s => {
req = req.clone({
setHeaders: {
'Content-Type': 'application/json; charset=utf-8',
'Authorization': 'Bearer ' + s
}
});
}); ¨*/
this.fetchUser()
.then((user) => {
console.log(user);
});
console.log("gets printed first");
return next.handle(req);
}
async fetchUser() {
try {
const auth = await this.checkAuth(); // <- async operation
const user = await this.getUser(auth); // <- async operation
return user;
} catch (error) {
return {name: 'Default'};
}
}
checkAuth() { return "hello"; }
getUser(auth) { return "Kevin"; }
}
«Сначала печатается» печатается до того, как печатается «Кевин». Ergo: функция возвращается до завершения функции async / await.
Какие-нибудь решения? Заранее спасибо.
С уважением,
Kevin