2016-11-10 5 views
0

У меня есть угловая служба, которая возвращает объект пользователя. Пользовательский объект имеет свои атрибуты и массив стен. Служба возвращает наблюдаемый компонент вызова. В сервисе я могу создать пользовательский объект из json, возвращаемого службой http. Однако, когда я подписываюсь на услугу в моем компоненте, возвращаемый объект равен null. Что я здесь делаю неправильно?Угловой 2: Наблюдаемый, не возвращая объект (вложенный) из службы

// 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. 
    } 
+0

Откуда вы знаете, что это null? – echonax

+2

'user1 => this.currentUser = user1,' это функция, вызываемая при поступлении данных. Код в том месте, где у вас есть свой комментарий, выполняется loooong перед этим. –

ответ

0

Принимая ответ от Гюнтера:

user1 => this.currentUser = user1, это функция, вызываемая при поступлении данных. Код в том месте, где у вас есть свой комментарий, выполняется loooong до этого

3

У вас не хватает возврата заявления при отображении результата запроса поста.

В ES6 и ц:

  • Когда функция стрелка определяется с помощью скобок, оператор возврата является обязательным.
  • Когда функция стрелки определяются без скобок, ES6 автоматической генерация оператора возврата, возвращая значение выражения при условии после стрелки знаком

Ex:

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

Я думаю, что это было бы полезно, по крайней мере, попробовать @Shilpa Nagavara. –

Смежные вопросы