Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建一个新的Observable,订阅angular2中http.post方法返回的Observable?_Angular_Typescript_Rxjs - Fatal编程技术网

如何创建一个新的Observable,订阅angular2中http.post方法返回的Observable?

如何创建一个新的Observable,订阅angular2中http.post方法返回的Observable?,angular,typescript,rxjs,Angular,Typescript,Rxjs,我正在创建一个服务Angular2。我使用了http.post方法,它返回一个EventEmmiter,根据我接下来传递的文档,返回lambdas。 下一个lambda按预期工作,但根本不调用return lambda 当我尝试返回此.user时。它为空,因为post操作尚未完成。在auth响应返回之前,我应该做些什么来等待 如果我选择做反应式编程,并且想要返回一个Rx,作为这个方法的返回。我如何创建这个Rx.Observable,它将订阅http post Observable comple

我正在创建一个服务Angular2。我使用了http.post方法,它返回一个EventEmmiter,根据我接下来传递的文档,返回lambdas。

下一个lambda按预期工作,但根本不调用return lambda

当我尝试返回此.user时。它为空,因为post操作尚未完成。在auth响应返回之前,我应该做些什么来等待

如果我选择做反应式编程,并且想要返回一个Rx,作为这个方法的返回。我如何创建这个Rx.Observable,它将订阅http post Observable complete事件

@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;
}

这就是我将可观察字符串附加到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')
      }
    );
  }

嘿,这里,这似乎是固定在alpha33上的,看,我正在使用alpha33,但我确实发现了如何将一个可观察到的转换为另一个。谢谢:)很高兴看到你成功了。我还在学习如何使用Observable;。这肯定会有帮助,感谢您分享解决方案;)是的,我必须阅读整个rxjs文档,我很高兴文档很好:)
this.loginService.authenticateUser(credential).subscribe(val => {console.log('result:' + val)});