Angular 2:Observable 未从服务返回对象(嵌套)

Angular 2: Observable not returning the object (nested) from service

我有一个 angular 服务,returns 用户对象。用户对象有自己的属性和一组墙。服务 returns 是调用组件的可观察对象。在该服务中,我可以从 http 服务返回的 json 创建一个用户对象。但是,当我在我的组件中订阅服务时,返回的对象为空。我在这里做错了什么?

// user.ts

import { wall } from './wall';

export class user {
    Id: number;
    EntryType: number;
    UserType: number;
    SubscriptionType: number;
    IsCoach: boolean;
    Username: string;
    Email: string;
    Name: string;
    Password: string;
    Created: string;
    MemberWalls: wall[];
}
//wall.ts
export class wall {
    Title: string;
    ViewItem_Id: number;
}
//authentication.service.ts

authenticate(authRequest: login): Observable<user> {
        let url: string = this.apiUrl + AppSettings.LOGIN_SERVICE;
        let headers = new Headers({
            'Content-Type': AppSettings.CONTENT_TYPE_HEADER, //'; charset=utf-8',
            'client-secret': AppSettings.CLIENT_SECRET,
            'client-id': AppSettings.CLIENT_ID
        });

        let options = new RequestOptions({ headers: headers });

        return this._http.post(url, authRequest, options) // 
            .map(data => {
                this.authenticated(data);
            })
            .catch(this.handleError);

    }

    private authenticated(res: Response) {
        let body = res.json();
        if (body.StatusCode === 200) {
            localStorage.setItem('auth_token', res.headers.get("access-token"));
            let user1: user = body.Data;
            //The user object is fine here. 
            //That means that the json and the user class structure match perfectly
            console.log(user1);
            return body.Data || {};
        }
        else {
            return {};
        }
    }
//login.component.ts

login() {
        this.errorMessage = '';
        this.currentUser = null;

            this._authService.authenticate(this.loginModel)
                .subscribe(user1 => this.currentUser = user1,
                error => this.handleError( error));

  //The user1 returned by the service is always null.
    }

映射 post 请求的结果时,您缺少 return 语句。

在 es6 和 ts 中:

  • 当使用括号定义箭头函数时,return语句是必需的。
  • 当箭头函数定义时没有括号,es6 自动生成一个 return 语句 return 在箭头符号
  • 之后提供的表达式的值

例如:

let f = (data) => this.authenticated(data);;
// Or 
let f = (data) => { return this.authenticated(data); };

接受 Gunter 的回答:

user1 => this.currentUser = user1,是数据到达时调用的函数。您发表评论的地方的代码在此之前执行了很长时间