开发者问题收集

将函数转换为可观察变量

2018-07-22
4668

有人能帮忙把这个函数变成可观察函数吗?我需要用它来根据查询检查文档是否已经存在。如果不存在,我需要订阅它,这样我才能创建一个文档。

目前它给了我一个错误:

A function whose declared type is neither 'void' nor 'any' must return a value.

    exists(query: Vehicle): Observable<boolean>{
        this.afs.collection('vehicles',
            ref => 
            ref
            //queries
            .where("country","==", query.country)
          ).snapshotChanges().subscribe(
            res => {       

              if (res.length > 0){
                //the document exists
                return true
              }
              else {
                return false
              }
          }); 
    }//end exists()

然后我想调用它

this.vehicleService.exists({country:"USA})
  .subscribe(x => {
    if (x) {
      //create a new doc
    }
});
1个回答

您不应订阅,而应通过 map 将结果 pipe 传送出去,因为您希望将结果转换为布尔值。

其次,编译器会报错,因为您提供了返回类型,但实际上并未返回任何内容,因此请确保返回 Observable

它看起来应如下所示:

  exists(query: Vehicle): Observable<boolean> {
    return this.afs.collection('vehicles',
      ref =>
        //queries
        ref.where("country", "==", query.country)
    ).snapshotChanges().pipe(
      // Use map to transform the emitted value into true / false
      map(res => res && res.length > 0)
    )
  }//end exists()
user184994
2018-07-22