Javascript angular 6函数未按顺序执行所有代码行

Javascript angular 6函数未按顺序执行所有代码行,javascript,node.js,angular,Javascript,Node.js,Angular,我正在学习角度6,并尝试使用材质模态作为选择器 模式返回一个具有3个mongoose id的对象:{userID:'',partyID:'',teamID:'} 然后成功地将这些设置存储在localstorage中 我的问题是:- 我希望这样,如果页面最初加载,并且localstorage中有令牌,它会转到欢迎页面、歌曲页面或管理菜单 但是:在到达router.navigate部分之前,它不会评估所有partyValue等 *我的代码* ngOnInit() { console.log(

我正在学习角度6,并尝试使用材质模态作为选择器

模式返回一个具有3个mongoose id的对象:{userID:'',partyID:'',teamID:'}

然后成功地将这些设置存储在localstorage中

我的问题是:-

我希望这样,如果页面最初加载,并且localstorage中有令牌,它会转到欢迎页面、歌曲页面或管理菜单

但是:在到达router.navigate部分之前,它不会评估所有partyValue等

*我的代码*

ngOnInit() {
    console.log('INTO Init ', this.userLoggedIn, this.teamLoggedIn, this.partyLoggedIn);
    this.evaluateTokens();
    console.log('OUT Init ', this.userLoggedIn, this.teamLoggedIn, this.partyLoggedIn);

  }

  evaluateTokens(){
    let user  = localStorage.getItem('user');
    let party = localStorage.getItem('party');
    let team  = localStorage.getItem('team');
    if(!!user){
      this._User.details(user).subscribe(
        data => { console.log('setting user values ');
          this.userValues = data;
          this.userLoggedIn = true;
          this.teamLoggedIn = false;
          this.partyLoggedIn = false;
        },
        err => console.log('User details error : ',err)
      );
    } else {
      if(!!team){
        this._Team.details(team).subscribe(
          data => { console.log('setting team values ');
            this.teamValues = data;
            this.teamLoggedIn = true;},
          err => console.log('Team details error : ',err)
        );
      }
      if (!!party){
        this._Party.details(party).subscribe(
          data => { console.log('setting party values '); 
            this.partyValues = data;
            this.partyLoggedIn = true;},
          err => console.log('Party details error : ',err)
        );
      }
    }
    console.log('After If Statements : ', this.userLoggedIn, this.partyLoggedIn, this.teamLoggedIn);
    if(this.userLoggedIn){
      console.log('go to admin');     
      this._router.navigate(['/admin']);
    } else if(this.partyLoggedIn || this.teamLoggedIn){
      console.log('go to song search');
      this._router.navigate(['/songSearch']);
    } else {
      console.log('No Token');
      this._router.navigate(['/'])
    }
  }
控制台输出为:-

INTO Init  false false false  navbar.component.ts:74
After If Statements :  false false false navbar.component.ts:82
No Token navbar.component.ts:38
OUT Init  false false false core.js:3121
Angular is running in the development mode. Call enableProdMode() to enable the production mode.
navbar.component.ts:67 setting party values
我认为,在继续下一节之前,它不会等待服务部门的响应

欢迎任何帮助


戴夫试着这样做。在订阅中添加所需的导航

比如,

this._User.details(user).subscribe(
    data => { 
      this.userValues = data;
      this.userLoggedIn = true;
      this.teamLoggedIn = false;
      this.partyLoggedIn = false;
      this._router.navigate(['/admin']);
    },
    err => console.log('User details error : ',err)
  );
通过理解流程,您显然是正确的,导航不会等到响应从服务器返回

您只需在
subscribe
中执行导航,就可以保证在响应之后进行导航

希望这有帮助