Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度Firestore根据返回的布尔值显示一个按钮,该布尔值检查Firestore文档是否存在_Javascript_Angular_Typescript_Function_Google Cloud Firestore - Fatal编程技术网

Javascript 角度Firestore根据返回的布尔值显示一个按钮,该布尔值检查Firestore文档是否存在

Javascript 角度Firestore根据返回的布尔值显示一个按钮,该布尔值检查Firestore文档是否存在,javascript,angular,typescript,function,google-cloud-firestore,Javascript,Angular,Typescript,Function,Google Cloud Firestore,要求的行为: 根据角度服务返回的布尔值在角度视图中显示按钮,该布尔值检查Firestore文档是否存在 现状 该服务成功检查文档的存在。它还更新if/else语句中的全局变量。我可以在服务中调用函数,它会记录布尔值,但不会返回它 发行 当我从组件调用函数时,它总是记录[object Promise],并且我得到一个ts lint错误:“Promise”类型不可分配给“boolean”类型 我怎样才能解决这个问题?我必须把承诺转换成布尔值还是可观测值 我的服务: 导出类ProfileFollow

要求的行为: 根据角度服务返回的布尔值在角度视图中显示按钮,该布尔值检查Firestore文档是否存在

现状 该服务成功检查文档的存在。它还更新if/else语句中的全局变量。我可以在服务中调用函数,它会记录布尔值,但不会返回它

发行 当我从组件调用函数时,它总是记录[object Promise],并且我得到一个ts lint错误:“Promise”类型不可分配给“boolean”类型

我怎样才能解决这个问题?我必须把承诺转换成布尔值还是可观测值

我的服务:

导出类ProfileFollowService{ //应该更新的全局变量 followState:布尔值; //检查文档是否存在并返回布尔值 异步CheckFollowFollowId:string,FollowRid:string:Promise{ 常量followDoc= this.angularFirestore.collection`users/${followerid}/follower`.docfollowerID.ref; 返回followDoc.get.thendoc=>{ 如果存在文档{ this.followState=true; }否则{ this.followState=false; } 返回此。followState; }; } 异步CallCheckFollowFollowId:string,FollowRid:string{ const result=wait this.checkFollowFollowFollowId,followId; console.logresult;//根据请求记录true或false 返回结果; }
} 有点盲目编码,但这行得通吗

在服务中,使用Rxjs验证对象是否存在,并返回结果的可观察值。通过快照更改,使值可以动态更改:

public callCheckFollow(followingID: string, followerID: string): Observable<boolean> {
    return of(this.angularFirestore.collection('users/${followingID}/following').doc(followerID).snapshotChanges().take(1).do(d => d.payload.exists));
}
在TS组件中,只需从服务中获取可观察内容

export class ServiceTestComponent implements OnInit {

  followState: Observable<boolean>;

  constructor(private followService: ProfileFollowService) {
     this.followState = this.followService.callCheckFollow('someID', 'someID');   
   }
}
然后在html中异步侦听follow状态的更改

<div *ngIf="(followState | async)">
  <p>hello Doc</p>
</div>

<div *ngIf="(!followState | async)">
  <p>No doc</p>
</div>

在component typescript中,您有一个布尔属性,并且您正在将其分配给构造函数中的Promise

将代码移动到ngOnInit add async关键字,然后再分配followState use关键字wait


然后我得到了这个错误:属性“take”在类型“Observable”上不存在。
export class ServiceTestComponent implements OnInit {

  followState: boolean;

  constructor(private followService: ProfileFollowService) { }

   // logs [object Promise], should log true or false
   async ngOnInit() {
     console.log('followstate' + this.followState);

     this.followState = await this.followService.callCheckFollow('someID', 'someID');
   }


}