【问题标题】:Getting false value in subscribe Angular在订阅Angular中获取错误值
【发布时间】:2018-06-24 03:00:28
【问题描述】:

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

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,则抽头部分永远不会被执行。因此,当存在现有代码但永远不会消失时,会出现错误消息。

更新: 我已经在pipe 中尝试过catchError(),但我也没有收到任何错误。

【问题讨论】:

    标签: angular rxjs angular6


    【解决方案1】:

    我已经通过以下代码解决了这个问题:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      相关资源
      最近更新 更多