在function1()中调用function2(),但它在.subscribe()

时间:2017-05-24 03:55:59

标签: javascript angularjs json function local-storage

我的login.component.ts中有两个函数,我想在 function1()结束后立即调用 function2(),但它会被调用之前.subscribe(),请指导为什么会发生这种情况以及如何更正,以下是我的代码:

import { Component, OnInit } from '@angular/core';
import { Injectable } from '@angular/core';
import { HttpModule  } from '@angular/http';
import { Headers, Http } from '@angular/http';
import { LoginService } from './login.service';
import 'rxjs/add/operator/map';

@Component({
  providers: [LoginService],
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})


export class LoginComponent implements OnInit {
     public user_form_value = 'info@lamchemical.com';
     public password_form_value = 'lam';
     public loggeduser_array = [];

     constructor(private _loginService: LoginService) { }

     login2(){
    console.log(this.user_form_value);
    console.log(this.password_form_value);
    this._loginService.login(this.user_form_value, this.password_form_value).subscribe(
      res =>{
        console.log(res.user);
      localStorage.setItem("getLoggedInUserANG",JSON.stringify(res.user));
      this.loggeduser_array  = JSON.parse(localStorage.getItem("getLoggedInUserANG"));
     // console.log((this.loggeduser_array as any).name);
      console.log(this.loggeduser_array["name"]);    
    }
      )
   this.login_true_2();
  }


login_true_2(){
  if(localStorage.getItem("getLoggedInUserANG") != null) {
		alert("you are in");
	} else {
		alert("Wrong username or password");
	}
}

 
 ngOnInit() {
}
}

为了更清楚地解释,让我添加数字作为在哪个回合执行的内容 1.我在控制台中看到此消息 - console.log(this.user_form_value);

  1. 然后我看到 - console.log(this.password_form_value);

  2. 然后我看到提示 - 提醒(“用户名或密码错误”);

  3. 然后我看到 - console.log(res.user); ,最后

  4. console.log(this.loggeduser_array [“name”]);

  5. 现在,如果我再次按下按钮来调用 login2()功能,这次我会看到警告 - 警告(“你在”); ,为什么第二次,我希望它第一次工作。请指导

1 个答案:

答案 0 :(得分:1)

您需要在订阅处理程序中调用login_true_2方法,否则在设置本地存储之前将调用它,因为login方法是异步的。

第二次它正在工作,因为当第二次点击发生时,第一次调用已经设置了本地存储值。

  login2() {
    console.log(this.user_form_value);
    console.log(this.password_form_value);
    this._loginService.login(this.user_form_value, this.password_form_value).subscribe(
      res => {
        console.log(res.user);
        localStorage.setItem("getLoggedInUserANG", JSON.stringify(res.user));
        this.loggeduser_array = JSON.parse(localStorage.getItem("getLoggedInUserANG"));
        // console.log((this.loggeduser_array as any).name);
        console.log(this.loggeduser_array["name"]);
        this.login_true_2();
      }
    )
  }