我具有以下功能来检查数据库中是否存在代码:
isCodeExist(code: string): Observable < boolean > {
return <Observable < boolean >> this.afs
.collection(this.jobsCollection, ref => ref
.where('code', '==', code)
.limit(1)
)
.valueChanges()
.pipe(
flatMap(jobs => jobs),
map(job => !!job)
);
}
这是我的使用方式:
onChangeCode() {
this.jobService.isCodeExist(this.job.code)
.pipe(
tap(isCode => {
console.log(isCode);
// I want to show an error message based on true or false returned
// this.showError = isCode;
})
)
.subscribe();
}
我想显示基于返回的true或false的错误消息,但是console.log仅记录true。如果值为false,则分接头永远不会执行。因此,当存在现有代码时,错误消息会出现,但不会消失。
更新:
我已经在catchError()
内尝试过pipe
,但是我也没有得到任何错误。
答案 0 :(得分:0)
我已经通过以下代码解决了这个问题:
isCodeExist(code: string): Observable < Job[] > {
return <Observable < Job[] >> this.afs
.collection(this.jobsCollection, ref => ref
.where('code', '==', code)
.limit(1)
)
.valueChanges();
}
onChangeCode() {
this.jobService.isCodeExist(this.job.code)
.pipe(
tap(code => {
code.length > 0 ? this.codeAlreadyExists = true : this.codeAlreadyExists = false;
})
)
.subscribe();
}
理想情况下,我想从函数本身返回一个布尔值,但这对我来说不起作用。