return 如何从 Angular 中的 RXJS 函数处理可观察值

How to return value from function processing observable of RXJS in Angular

我在 Angular 中有一个登录视图。我做了:

  1. 一个 UserService 来获取用户数据。

  2. 用于检查有效用户的 AuthService

因此,从登录视图来看,我将用户名传递给 AuthService,它与 UserService 联系以获取数据并操作数据,return 用户是否有效的 boolean 值。

登录视图下方的代码如下:

身份验证服务:

this.authenticationService.checkValidLogin(userName,password);

身份验证服务:

checkValidLogin(username: string, password: string) {
    this.userService.getUserByEmail(username).snapshotChanges().pipe(map(data => data.map(c => ({ key: c.payload.doc.id, ...c.payload.doc.data() })))).subscribe(res => {
        if (res[0].password === password) {
            return true;
        } else {
            return false;
        }
    });
}

我有 return truefalse 但不会 return 方法..!!

我想要 return truefalse 订阅的价值或者我在这里缺少什么?

由于代码是异步的,您必须 return Observable 并在要检查其有效性时订阅它。

checkValidLogin(username: string, password: string): Observable<boolean> {
    return this.userService.getUserByEmail(username).snapshotChanges().pipe(map(data => data.map(c => ({ key: c.payload.doc.id, ...c.payload.doc.data() }))),
// map result to true or false
map(res => {
      if (res[0].password === password) {
        return true;
      } else {
        return false;
      }
    })
);

然后你想用的时候:

this.authenticationService.checkValidLogin(userName,password).subscribe(valid => {
  console.log(valid); // do your logic here of everything that determines if it's valid or not
});

请在this.userService.getUserByEmail之前添加return如下。

checkValidLogin(username: string, password: string){
return this.userService.getUserByEmail(username).snapshotChanges().pipe(map(data => data.map(c => ({ key: c.payload.doc.id, ...c.payload.doc.data() })))).subscribe(res => {
  if (res[0].password === password) {
    return true;
  } else {
    return false;
  }
});

我还建议只 return res[0].password === password 因为它 return 是一个布尔值