2015-07-30 3 views
1

Я создаю сервис Angular2. Я использовал метод http.post, который возвращает EventEmmiter и в соответствии с документацией, которую я передал дальше, и возвращаю лямбды. https://angular.io/docs/js/latest/api/http/Http-class.htmlКак создать новый Observable, подписанный на Observable, возвращаемый методом http.post в angular2

следующий лямбда работает должным образом, но возврат лямбда вообще не называется.

Когда я пытаюсь вернуть this.user. Он равен нулю, поскольку пост-операция еще не завершена. Что я должен сделать, чтобы подождать, пока не вернется ответ auth.

И если я решил сделать реактивное программирование и хочу вернуть Rx.Observable в качестве возврата этого метода. Как я могу создать этот Rx.Observable, который будет подписаться на событие post postable complete post.

@Injectable() 
export class LoginService { 

    http:Http; 
    headers:Headers; 
    user:User; 

    constructor(http: Http) { 
    this.http=http; 
    this.headers=new Headers(); 
    this.headers.set('Content-Type','application/json'); 
    this.user = new User(); 
    } 

    authenticateUser(credential:Credential) { 
    credential.type = 'normal'; 
    this.http.post('http://localhost:8000/api/v1/auth', 
     JSON.stringify(credential), 
     { 
     headers: this.headers 
     } 
    ).observer({ 
     next: (res) => { 
     if(res.json()._error_type){ 
      console.log('Error Occured'); 
     } 
     console.log(res.json()); 
     this.user.authToken = res.json().auth_token; 
     }, 
     return:() => { 
     console.log("Logged In"); 
     return "LoggedIn Success" 
     }} 
    ); 
    console.log(this.user); 
    return this.user; 
    } 
} 

export class User{ 
    authToken:String; 
} 

export class Credential{ 
    username:string; 
    password:string; 
    type:string; 
} 
+0

Эй, это, кажется, фиксируется на alpha33 , см. [changelog] (https://github.com/angular/angular/blob/master/CHANGELOG.md) и [это] (https://github.com/angular/angular/commit/6fac9011) –

+0

Я используя alpha33, однако я обнаружил как преобразовать один наблюдаемый в другой. Спасибо :) –

ответ

2

Это, как я прикрепил строку наблюдаемую для ответа HTTP вызова

authenticateUser(credential:Credential):Rx.Observable<string> { 
    credential.type = 'normal'; 
    return Rx.Observable.create<string>(
     observer => { 
     var val:String; 
     this.http.post('http://localhost:8000/api/v1/auth', 
      JSON.stringify(credential), 
      { 
      headers: this.headers 
      } 
     ).toRx().map(res => res.json()).subscribe(
     (res) => { 
      if(res._error_type){ 
      console.log('Error Occured'); 
      observer.onError('ErrorOccured'); 
      } else { 
      this.user = new User(); 
      this.user.authToken = res.auth_token; 
      observer.onNext('LoginSuccess'); 
      } 
      observer.onCompleted(); 
     }); 
     return() => console.log('disposed') 
     } 
    ); 
    } 

Здесь интерфейс компонента, который звонил LoginService

this.loginService.authenticateUser(credential).subscribe(val => {console.log('result:' + val)}); 
+0

Рад видеть, что ты заработал. Я все еще изучаю, как использовать Observable; _ ;. Это поможет, конечно, спасибо за обмен решением;) –

+0

Да, мне пришлось прочитать всю документацию rxjs, я рад, что документация хорошая :) –

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