Angular 角度类型脚本cookie存在于逻辑中

Angular 角度类型脚本cookie存在于逻辑中,angular,typescript,Angular,Typescript,我正在利用“ngx cookie服务”在我的angular项目中处理cookie 我曾经遇到过这样一个问题:我检查cookie是否存在,如果它===false,那么它应该从API检索数据,但是在第一次运行时,它总是返回false,因为cookie不存在,但是没有检索到JSON,如图所示。 再次重新加载后,它会显示cookie存在并成功检索数据,如图所示 我很困惑为什么它不在第一个请求中打印JSON,而是在随后的任何请求中打印 这是我的打字脚本代码 let cookieExists: bool

我正在利用“ngx cookie服务”在我的angular项目中处理cookie

我曾经遇到过这样一个问题:我检查cookie是否存在,如果它===false,那么它应该从API检索数据,但是在第一次运行时,它总是返回false,因为cookie不存在,但是没有检索到
JSON
,如图所示。

再次重新加载后,它会显示cookie存在并成功检索数据,如图所示

我很困惑为什么它不在第一个请求中打印
JSON
,而是在随后的任何请求中打印

这是我的打字脚本代码

let cookieExists: boolean = this.cookieService.check(this.id);

console.log("Cookie exists: " + cookieExists);

if (cookieExists === false) {
  axios.get('https://localhost:5001/api/Trace/' + this.id)
    .then((response: AxiosResponse<Trace>) => {
      var minutesToAdd = 1;
      var currentDate = new Date();
      var futureDate = new Date(currentDate.getTime() + minutesToAdd * 60000);

      this.cookieService.set(this.id, JSON.stringify(response.data), futureDate, null, null, null, null);
    });
}

console.log(this.cookieService.get(this.id));
让cookieExists:boolean=this.cookieService.check(this.id);
log(“Cookie存在:+cookieExists”);
如果(cookieExists===false){
axios.get()https://localhost:5001/api/Trace/“+this.id)
.然后((响应:AxiosResponse)=>{
var minutesoadd=1;
var currentDate=新日期();
var futureDate=新日期(currentDate.getTime()+minutesLoadd*60000);
this.cookieService.set(this.id,JSON.stringify(response.data),futureDate,null,null,null,null);
});
}
log(this.cookieService.get(this.id));
在初始请求时,数据应该在控制台中打印,就像在第二个图像中一样

我尝试过的异步代码,结果相同

let cookieExists: boolean = this.cookieService.check(this.id);

console.log("Cookie exists: " + cookieExists);

if (cookieExists === false) {
  const doGetRequest = async () => {
    await axios.get('https://localhost:5001/api/Trace/' + this.id)
      .then((response: AxiosResponse<Trace>) => {
        var minutesToAdd = 1;
        var currentDate = new Date();
        var futureDate = new Date(currentDate.getTime() + minutesToAdd * 60000);

        this.cookieService.set(this.id, JSON.stringify(response.data), futureDate, null, null, null, null);
      });
  };
  doGetRequest();
}

console.log(this.cookieService.get(this.id));
让cookieExists:boolean=this.cookieService.check(this.id);
log(“Cookie存在:+cookieExists”);
如果(cookieExists===false){
const doGetRequest=async()=>{
等待axios。获取更多信息https://localhost:5001/api/Trace/“+this.id)
.然后((响应:AxiosResponse)=>{
var minutesoadd=1;
var currentDate=新日期();
var futureDate=新日期(currentDate.getTime()+minutesLoadd*60000);
this.cookieService.set(this.id,JSON.stringify(response.data),futureDate,null,null,null,null);
});
};
doGetRequest();
}
log(this.cookieService.get(this.id));

我解决了这个问题,将get请求相关的代码放入一个新的异步函数中,而不是带异步内联函数的构造函数中

constructor(...) {
  this.doWork();
}

async doWork() {
  ...

  let cookieExists: boolean = this.cookieService.check(this.id);

  if (cookieExists === false) {
    await axios.get('https://localhost:5001/api/Trace/' + this.id)
      .then((response: AxiosResponse<Trace>) => {
        var minutesToAdd = 5;
        var currentDate = new Date();
        var futureDate = new Date(currentDate.getTime() + minutesToAdd * 60000);

        this.cookieService.set(this.id, JSON.stringify(response.data), futureDate, null, null, null, null);
      });
  }

  let json: string = this.cookieService.get(this.id);
  this.trace = JSON.parse(json);
  
  ...
}
构造函数(…){
这是doWork();
}
异步doWork(){
...
让cookieExists:boolean=this.cookieService.check(this.id);
如果(cookieExists===false){
等待axios。获取更多信息https://localhost:5001/api/Trace/“+this.id)
.然后((响应:AxiosResponse)=>{
var MinutesLoadd=5;
var currentDate=新日期();
var futureDate=新日期(currentDate.getTime()+minutesLoadd*60000);
this.cookieService.set(this.id,JSON.stringify(response.data),futureDate,null,null,null,null);
});
}
让json:string=this.cookieService.get(this.id);
this.trace=JSON.parse(JSON);
...
}

这是否回答了您的问题?我尝试在axios.get之前带有await的异步(){}中执行此操作,但结果相同。
“我尝试在带有await before的异步(){}中执行此操作…”
← 请使用最新尝试更新问题中的代码。请同时显示所有相关代码,包括方法签名和如何调用。我所尝试的就是我刚才所说的。我用async()=>{}包装了get请求,并将wait放在axios.get前面。同样的结果。如果你想得到帮助,你应该用你最近的尝试更新你问题中的代码。