无法在 Angularfire2 中按我的意愿处理文档数据
Not able to handle document data as I want in Angularfire2
我有一个名为 'users' 的集合,其中包含一些虚拟数据,如下所示:
uid: {
admin: false,
uid: 'longhash',
displayName: 'User Name',
email: 'user@email.com'
}
我在处理文档中的 'admin' 数据异步处理时遇到问题。
我的代码:
isAdmin:Observable<boolean> = this.uid.pipe(
switchMap(uid => {
if(!uid){
return observableOf(false);
} else {
let user = new BehaviorSubject<string>(uid);
return user.pipe(
switchMap(page =>
this.afs.collection<User>('users', ref => ref.where('uid', '==', uid)).snapshotChanges().pipe(
map(changes => {
return changes.map(userData => {
const cUser = userData.payload.doc.data() as User;
return cUser ? cUser.admin : false;
});
})
)
)
);
}
})
);
这是我的 IDE 显示的错误:
有没有人知道我在这里做错了什么?
在你的 switchMap 运算符中,你正在 return 发射一个布尔值的 observable 或一个发射布尔值数组的 observable,这与 isAdmin 常量的类型声明不符 const isAdmin:Observable<boolean>
。尝试这样的事情:isAdmin: Observable<boolean> | Observable<boolean[]>
,它应该修复类型错误。
如果您的目标是 return 一个布尔值而不是布尔值数组,假设您的用户集合中只有一个文档包含您的 uid,那么试试这个:
isAdmin:Observable<boolean> = this.uid.pipe(
switchMap(uid => {
if(!uid){
return of(false);
} else {
return of(uid).pipe(
switchMap(page =>
this.afs.collection<User>('users', ref => ref.where('uid', '==', uid).limit(1)).snapshotChanges().pipe(
map(changes => {
return changes.map(userData => {
const cUser = userData.payload.doc.data() as User;
return cUser ? !!cUser.admin : false;
})[0];
})
)
)
);
}
})
);
我有一个名为 'users' 的集合,其中包含一些虚拟数据,如下所示:
uid: {
admin: false,
uid: 'longhash',
displayName: 'User Name',
email: 'user@email.com'
}
我在处理文档中的 'admin' 数据异步处理时遇到问题。
我的代码:
isAdmin:Observable<boolean> = this.uid.pipe(
switchMap(uid => {
if(!uid){
return observableOf(false);
} else {
let user = new BehaviorSubject<string>(uid);
return user.pipe(
switchMap(page =>
this.afs.collection<User>('users', ref => ref.where('uid', '==', uid)).snapshotChanges().pipe(
map(changes => {
return changes.map(userData => {
const cUser = userData.payload.doc.data() as User;
return cUser ? cUser.admin : false;
});
})
)
)
);
}
})
);
这是我的 IDE 显示的错误:
有没有人知道我在这里做错了什么?
在你的 switchMap 运算符中,你正在 return 发射一个布尔值的 observable 或一个发射布尔值数组的 observable,这与 isAdmin 常量的类型声明不符 const isAdmin:Observable<boolean>
。尝试这样的事情:isAdmin: Observable<boolean> | Observable<boolean[]>
,它应该修复类型错误。
如果您的目标是 return 一个布尔值而不是布尔值数组,假设您的用户集合中只有一个文档包含您的 uid,那么试试这个:
isAdmin:Observable<boolean> = this.uid.pipe(
switchMap(uid => {
if(!uid){
return of(false);
} else {
return of(uid).pipe(
switchMap(page =>
this.afs.collection<User>('users', ref => ref.where('uid', '==', uid).limit(1)).snapshotChanges().pipe(
map(changes => {
return changes.map(userData => {
const cUser = userData.payload.doc.data() as User;
return cUser ? !!cUser.admin : false;
})[0];
})
)
)
);
}
})
);