Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度等待,直到变量已初始化_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 角度等待,直到变量已初始化

Javascript 角度等待,直到变量已初始化,javascript,angular,typescript,Javascript,Angular,Typescript,我将为web应用程序创建一个服务。第一步是通过RESTAPI获取令牌。一旦此令牌可用,就应将其作为标头发送以获取更多信息 我的问题是,它执行函数以在设置变量之前获取更多信息。(头是空的,但是如果我手动设置令牌,它就会工作) 如何使函数等待变量有值 谢谢 gettoken(): void { this.http.get<InitResponse>('URL' + '/token').subscribe(data => { this.token = data.token;

我将为web应用程序创建一个服务。第一步是通过RESTAPI获取令牌。一旦此令牌可用,就应将其作为标头发送以获取更多信息

我的问题是,它执行函数以在设置变量之前获取更多信息。(头是空的,但是如果我手动设置令牌,它就会工作)

如何使函数等待变量有值

谢谢

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}`
        }
      });