在订阅Angular中获取错误的值

时间:2018-06-24 03:00:29

标签: angular rxjs angular6

我具有以下功能来检查数据库中是否存在代码:

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,但是我也没有得到任何错误。

1 个答案:

答案 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();
}

理想情况下,我想从函数本身返回一个布尔值,但这对我来说不起作用。