簡體   English   中英

角2訂閱可觀察得到不確定

[英]angular 2 subscribe to observable getting undefined

我在angular 2應用程序中有一個服務和一個組件,我在服務中得到響應並且也能夠登錄到控制台,但是在組件中顯示未定義。 我在這里做什么錯? 任何人都可以指出錯誤。 提前致謝

服務:

    import { Injectable } from '@angular/core'
import { Http, Response,Headers } from '@angular/http'
import { Observable } from 'rxjs/Observable'
import "rxjs/add/operator/map"
import "rxjs/add/operator/catch"
import "rxjs/add/Observable/throw"

@Injectable()
export class LoginService {
    public logResult;
    private _url = "http://localhost:53798/api/Login?uname=abcd&pass=1"


    constructor(private _http: Http) { }

getEmployees(userID:string,passWord:string) : Observable<boolean>{

    return this._http.get(this._url).map((response: Response) => 
        {
           let logResult= response.json();
           logResult.forEach(re=>{

              if(re.LoginResult=="Success")
              {
                  console.log('Success');//this is being written to console
                  return<boolean> true;
              }
              else{
                  console.log('fail');
                  return<boolean> false;
              }
            })
    }).catch(this._errorHandler);


}
_errorHandler(error: Response) {
    console.log(error);
    return Observable.throw(error || "Server not Found")
}
}

配件:

 ValidateLogin(){


  this._loginService.getEmployees(this.loginForm.value.UserId,this.loginForm.value.password)

  .subscribe(resLoginData => {
      console.log(resLoginData);//resLoginData is undefined
      if(resLoginData===true)
      { 
          console.log('Success');
          this.router.navigateByUrl('/Home');}
      else{
        console.log('Fail');
        this.router.navigateByUrl('/Login');
      }
        resLoginError => this.errorMsg = resLoginError})           
 }     
}

forEach塊不會在return語句處停止。

let logResult= response.json().data;
let result = false;
logResult.forEach(re=>{

    if(re.LoginResult=="Success")
    {
        // console.log('Success');//this is being written to console
        result = true;
    }
    else{
        // console.log('fail');
        result false;
    }
});

return result;     // return the true result out of forEach.

另外,您應該更改let logResult= response.json(); let logResult= response.json().data; for http方法將以這種方式返回數據。

您是否在應用中安裝了rxjs和zone-js

import { Injectable } from "@angular/core";
        import { Http, Response, Headers, RequestOptions, URLSearchParams } from "@angular/http";
        import { Observable } from "rxjs/Observable";
        import "rxjs/Rx";

    @Injectable()
    export class LoginService {
        public logResult;
        private _url = "http://localhost:53798/api/Login?uname=abcd&pass=1"
     constructor(private _http: Http) { }

    getEmployees(userID:string,passWord:string) : Observable<boolean>{

        return this._http.get(this._url).map((response: Response) => 
            {
               let logResult= response.json();
               logResult.forEach(re=>{

                  if(re.LoginResult=="Success")
                  {
                      console.log('Success');//this is being written to console
                      return true;
                  }
                  else{
                      console.log('fail');
                      return false;
                  }
                })
        }).catch(this._errorHandler);


    }
    _errorHandler(error: Response) {
        console.log(error);
        return Observable.throw(error || "Server not Found")
    }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM