【问题标题】:Why is the response available in a service but in the component is undefined? [duplicate]为什么响应在服务中可用但在组件中未定义? [复制]
【发布时间】:2018-04-07 13:17:11
【问题描述】:

我有一个服务和一个使用该服务的组件。问题是在服务中我可以读取作为 JSON 对象的响应。但在组件中,我得到以下信息:res: undefined

服务:

constructor(
    private http: Http,
    private fbuilder: FormBuilder,
    private user: UserService
) {}
login(uname:string, pass:string): Observable<any> {

    let headers = new Headers({
        'Content-Type': 'application/json',
        'Username':uname,
        'Password':pass
    });
    let options = new RequestOptions({ headers: headers });
    let data = {};
    var Observable = this.http.post( url, data, options )
    .map(res => {
        res.json();
    })
    .catch( (error: any) => Observable.throw(error.json().error || 'Server error') );
    return Observable;
}

组件:

constructor(
    private http: Http,
    private fbuilder: FormBuilder,
    private user: UserService
) {}
loginUser(uname: string, pass: string) {
    this.user.login(uname, pass).subscribe(
        res => {
            console.log('res: ' + JSON.stringify(res));
        },
        err => {
            this.errorMessage = err;
        }
    );
}

【问题讨论】:

    标签: json angular typescript observable


    【解决方案1】:

    您的问题似乎与此代码有关:

    .map(res => {
        res.json();
    })
    

    您没有返回res.json 的结果。您只需要添加return 语句,如下所示:

    .map(res => {
        return res.json();
    })
    

    您也可以删除 {} 对,如下所示:

    .map(res => res.json())
    

    【讨论】:

    • 哦。我的错。你说得对!之前有同样的问题,发现我必须返回res.json()。问题解决了。是的,删除 {} 会节省一些代码,但我想打印出 res。在console.
    猜你喜欢
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 2018-08-11
    • 2018-08-30
    • 2016-11-30
    • 2014-10-13
    相关资源
    最近更新 更多