关于angular:使用Firebase和AngularFire2注册用户

Register User with Firebase and AngularFire2

在我的app.component.ts中,我正在使用此功能通过angularFire2将用户注册到Firebase。 但是我在类型" void"上遇到"属性'subscribe'不存在"的错误。

1
2
3
4
5
6
7
8
9
10
register() {
    this.userService.registerUser(this.model)
        .subscribe(
            data => {
                console.log('Registration successful')
            },
            error => {
                this.loading = false;
            });
}

在我的userService.ts中,我有以下调用从Firebase获取数据

1
2
3
4
5
6
7
8
9
10
11
12
registerUser(user: User) {
    this.angularFire.auth.createUser({
    email: user.email,
    password: user.password
    }).then(
    (success) => {
        console.log(success);
    }).catch(
    (err) => {
        console.log(err);
    })
}

我知道为什么会出现错误。 因为我在userService中的registerUse函数不会返回可观察到的结果。 当我刚接触Typescript时,如何将其更改为可观察的状态,以便在数据返回时可以在app.component.ts中的console.log('Success')进行操作?


最直接的选择是退还诺言:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { FirebaseAuthState } from 'angularfire2';

registerUser(user: User): Promise<FirebaseAuthState> {
  return this.angularFire.auth.createUser({
    email: user.email,
    password: user.password
  })
  .then((authState: FirebaseAuthState) => {
    console.log(success);
    return authState;
  })
  .catch((error) => {
    console.log(error);
    throw error;
  });
}

但是,要返回一个可观察值,可以使用fromPromise

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromPromise';
import { FirebaseAuthState } from 'angularfire2';

registerUser(user: User): Observable<FirebaseAuthState> {
  return Observable.fromPromise(this.angularFire.auth.createUser({
    email: user.email,
    password: user.password
  })
  .then((authState: FirebaseAuthState) => {
    console.log(success);
    return authState;
  })
  .catch((error) => {
    console.log(error);
    throw error;
  }));
}

如果要使用registerUser中的catch记录错误,则应重新引发错误,以便调用者可以捕获并处理该错误。 如果您不需要日志记录,只需将其保留,调用者就可以处理任何错误(通过可观察的):

1
2
3
4
5
6
7
8
9
10
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromPromise';
import { FirebaseAuthState } from 'angularfire2';

registerUser(user: User): Observable<FirebaseAuthState> {
  return Observable.fromPromise(this.angularFire.auth.createUser({
    email: user.email,
    password: user.password
  }));
}

如果您不想返回AngularFire2的FirebaseAuthState,则可以使用then返回其他内容作为promise的解析值(这是可观察对象发出的值)。