Javascript 如何使用typescript(ionic2)从函数中获取值

Javascript 如何使用typescript(ionic2)从函数中获取值,javascript,angular,typescript,ionic2,Javascript,Angular,Typescript,Ionic2,我试图从一个函数中得到一个值。这就是我想要做的: 在文件favorite.ts中 getUserFavsCount(userId:string){ 让计数=0; 让favs=this.af.list(`/favorites/${userId}`)。订阅(数据=>{ 计数=数据长度; }); console.log(count)//获取值。这里显示的是正确的 返回计数; }正如艾伦所评论的,您需要返回一个承诺。始终使用承诺,否则会出现并发问题。试试这个 getUserFavsCount = (u

我试图从一个函数中得到一个值。这就是我想要做的:

在文件favorite.ts中

getUserFavsCount(userId:string){
让计数=0;
让favs=this.af.list(`/favorites/${userId}`)。订阅(数据=>{
计数=数据长度;
});
console.log(count)//获取值。这里显示的是正确的
返回计数;

}
正如艾伦所评论的,您需要返回一个承诺。始终使用承诺,否则会出现并发问题。试试这个

getUserFavsCount = (userId: string): Promise<number> => {
  // SINCE YOU RETURN A LENGTH, THEN THE PROMISE SHOULD RETURN A NUMBER
  // THERE'S NO NEED TO DECLARE A COUNT VARIABLE SINCE YOU'LL NOT USE IT
  return new Promise<number>(resolve =>{
    let favs = this.af.list(`/favorites/${userId}`).subscribe(data =>{
      resolve(data.length);
    });
  });
}

希望这有帮助:D

您必须从
getUserFavsCount()
返回一个承诺,因为您正在向firebase发出请求,并且只有当请求完成时,您才能获得实际的计数。因此,您可以从
getUserFavsCount
返回
this.af.list('/favorites/${userId}')
,并在
countUserFav
中订阅它,并且只有当它准备好更新
this.myFavs
时才能订阅它。谢谢!!有效:)
countUserFav() {
  this.userProvider.currentUser.first().subscribe((currentUser: User) => {
    this.favoriteProvider.getUserFavsCount(currentUser.$key).then(res =>{
      this.myFavs = res;
    });
  });
}