【发布时间】:2018-05-03 16:50:28
【问题描述】:
我很麻烦。我正在尝试在 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"; }
}
“这首先打印”在“Kevin”打印之前打印。 Ergo:函数在 async/await 函数完成之前返回。
有什么解决办法吗?提前致谢。
问候, 凯文
【问题讨论】:
-
阻塞是什么意思,要中止一些正在运行的代码的执行吗?
-
我的意思是我希望执行等待异步操作。我希望 this.fetchUser() 在其余部分(console.log 和下一个返回)被执行之前完成。
标签: angular asynchronous async-await rxjs observable