Javascript 角度等待,直到变量已初始化
我将为web应用程序创建一个服务。第一步是通过RESTAPI获取令牌。一旦此令牌可用,就应将其作为标头发送以获取更多信息 我的问题是,它执行函数以在设置变量之前获取更多信息。(头是空的,但是如果我手动设置令牌,它就会工作) 如何使函数等待变量有值 谢谢Javascript 角度等待,直到变量已初始化,javascript,angular,typescript,Javascript,Angular,Typescript,我将为web应用程序创建一个服务。第一步是通过RESTAPI获取令牌。一旦此令牌可用,就应将其作为标头发送以获取更多信息 我的问题是,它执行函数以在设置变量之前获取更多信息。(头是空的,但是如果我手动设置令牌,它就会工作) 如何使函数等待变量有值 谢谢 gettoken(): void { this.http.get<InitResponse>('URL' + '/token').subscribe(data => { this.token = data.token;
gettoken(): void {
this.http.get<InitResponse>('URL' + '/token').subscribe(data => {
this.token = data.token;
localStorage.setItem('token', data.token);
getmoreInfo();
},
(err: HttpErrorResponse) => {
if (err.error instanceof Error) {
console.log('Client-side error occured.');
} else {
console.log('Server-side error occured.');
}
}
);
gettoken():void{
this.http.get('URL'+'/token').subscribe(数据=>{
this.token=data.token;
localStorage.setItem('token',data.token);
getmoreInfo();
},
(错误:HttpErrorResponse)=>{
if(err.error instanceof error){
console.log('发生客户端错误');
}否则{
console.log('发生服务器端错误');
}
}
);
}添加async并等待函数使其加载异步 这里有一些实践的例子 棱角的^ 当您在函数上设置async时
然后等待步骤,它会依次运行这些步骤,这就是异步代码的意思这是我的getToken方法:
getToken(idProfile: string): Observable<boolean> {
let urlAPIToken: string = urlAPIAuth;
urlAPIToken += '/token?id_profile=' + idProfile;
let res = encodeURIComponent(urlAPIToken);
return this.http.get(urlAPIToken, { withCredentials: true }).pipe(
map(result => {
let token = result.toString();
localStorage.setItem('token', token);
return true;
}));
}
示例:如何在标头中设置令牌?必须使
gettoken
异步。只需将其包装成可观察
并返回令牌,而不是返回无效
。谢谢您的回答。你能把我的密码改一下吗?我将Async放在函数前面,但不幸的是它不起作用。没有必要使用async/await
。现在它不返回任何值。他使用了RxJs
,这样他就可以返回observatable
,而不是将所有东西都包装在额外的承诺中。@KarolTrybulec说的话听起来是真的,但这也是我以前尝试过的一个建议,我确实做到了。所以我刚刚分享了我的经验。也许可以试试:this.http.get('URL'+'/token')。订阅((异步)数据=>{wait this.token=data.token;wait localStorage.setItem('token',data.token);wait getmoreInfo();},(err:HttpErrorResponse)=>{if(errr.error instanceof error){console.log('Client-side error发生了。'));}else{console.log('发生服务器端错误');}代码>
const token = localStorage.getItem(TOKEN_NAME);
request = request.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}
});