i am try to create a login app using angular 2 http with promise.

issue is before printing the response object in extractData function in 
service, "Got response" console is printing from login component. 

So before am getting response from my restful webservice login component 
below code are executes. This happening only first time i click sign in 
button. Second time onwards am getting response first then login component 
code are executes.

Please someone help me to how to wait till response come from webservice.

please find my code below.

Login component

import {Component} from '@angular/core';
import { Router} from '@angular/router';

import {User} from '../model/user';
import {UserService} from '../service/user-service';

@Component({
    selector : 'login-form',
    templateUrl : 'app/template/login.html',
    providers : [
        UserService
    ]
})

export class LoginComponent{

    user: User;

    constructor(private userService: UserService,private router: Router){}

    loginUser(form: any): void {  
        this.userService.loginUser(form.username,form.password).then(user => 
this.user = user)
        console.log("Got response");
        //console.log(this.user);
        try {
            console.log(this.user.userID);
            console.log(this.user.name);
            console.log(this.user.mobile);
            console.log(this.user.email);
            this.router.navigate(['/']);
        }
        catch(err) {
        }
  }
}

And my service 

import { Injectable }    from '@angular/core';
import { Headers, Http, Response, RequestOptions } from '@angular/http';

import '../rxjs-operators';

import {User} from '../model/user';

@Injectable()
export class UserService{

    private userUrl = 'http://localhost:8080/khalibottle/user/';
    private headers = new Headers({ 'Content-Type': 'application/json' });

    constructor(private http:Http){}

    getUsers (): Promise<User[]> {
    return this.http.get(this.userUrl + "list")
                  .toPromise()
                  .then(this.extractData)
                  .catch(this.handleError);
    }

    loginUser (userName,password): Promise<User> {
       let body = JSON.stringify({ userName, password });
       let options = new RequestOptions({ headers: this.headers });
       return this.http.post(this.userUrl + "login",body,options)
                  .toPromise()
                  .then(this.extractData)
                  .catch(this.handleError);
   }

   registerUser (name,mobile,email,password,roleID): Promise<string> {
    let body = JSON.stringify({ name, mobile, email, password, roleID });
    let options = new RequestOptions({ headers: this.headers });
    return this.http.post(this.userUrl + "register",body,options)
                  .toPromise()
                  .then(this.extractData)
                  .catch(this.handleError);
  }

    private extractData(res: Response) {
        let body = res.json();
      console.log(body);
        return body || { };
    }

    private handleError(error: any) {
        console.error('An error occurred', error);
        return Promise.reject(error.message || error);
    }
}

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to