return 如何从 Angular 中的 RXJS 函数处理可观察值
How to return value from function processing observable of RXJS in Angular
我在 Angular 中有一个登录视图。我做了:
一个 UserService 来获取用户数据。
用于检查有效用户的 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 true
或 false
但不会 return 方法..!!
我想要 return true
或 false
订阅的价值或者我在这里缺少什么?
由于代码是异步的,您必须 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 是一个布尔值
我在 Angular 中有一个登录视图。我做了:
一个 UserService 来获取用户数据。
用于检查有效用户的 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 true
或 false
但不会 return 方法..!!
我想要 return true
或 false
订阅的价值或者我在这里缺少什么?
由于代码是异步的,您必须 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 是一个布尔值