angular - Fonksiyonu gözlemlenebilir hale getir


Bu fonksiyonu bir gözlemlenebilir (observable) haline getirmeye kim yardım edebilir? Bir sorguya dayanarak bir belgenin zaten var olup olmadığını kontrol etmek için kullanmam gerekiyor. Eğer yoksa bir belge oluşturabilmem için abone olmam gerekiyor.

Şu anda bana bir hata veriyor:

Bildirilmiş türü ne 'void' ne de 'any' olan bir fonksiyon bir değer döndürmek zorundadır.

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

O zaman onu aramak istiyorum

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

Cevap #1

Abone olmak yerine, sonucu bir boole değerine dönüştürmek istediğiniz için sonucu map aracılığıyla pipe etmelisiniz.

İkincisi, derleyici şikayet ediyor çünkü bir dönüş tipi sağladınız ama aslında hiçbir şey dönmüyorsunuz, bu yüzden Observable döndürdüğünüzden emin olun.

Şunun gibi görünmelidir:

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