Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 角度等待,直到订阅完成,并给其他函数赋值_Javascript_Angular_Asynchronous_Subscribe - Fatal编程技术网

Javascript 角度等待,直到订阅完成,并给其他函数赋值

Javascript 角度等待,直到订阅完成,并给其他函数赋值,javascript,angular,asynchronous,subscribe,Javascript,Angular,Asynchronous,Subscribe,我有以下功能 文件:subcategory.service.ts getSubCategoriesById(inp_subCatid: String): Observable<any>{ this.getSubCategoriesList().snapshotChanges().pipe( map(changes => changes.map(c => ({ key: c.payload.key, ...c.payload.val() }

我有以下功能

文件:subcategory.service.ts

getSubCategoriesById(inp_subCatid: String): Observable<any>{
  this.getSubCategoriesList().snapshotChanges().pipe(
    map(changes =>
     changes.map(c =>
      ({ key: c.payload.key, ...c.payload.val() })
     )
    )
  ).subscribe(subCategories => {
    subCategories.filter(function (subCat) {
     return subCat.id == inp_subCatid;
   });
});
我遇到的问题是,我收到了以下错误消息: 错误类型错误:“this.SubCategoryService.getSubCategorysById(…)未定义”

我想在从文件“subcategory.service.ts”加载数据时获取数据
希望有人能帮助我。

你的方法应该是这样的:

getSubCategories(inp\u subCatid:string):可观察{
返回此.getSubCategoriesList().snapshotChanges().pipe(
map(changes=>changes.map(c=>
({key:c.payload.key,…c.payload.val()})
).filter((subCat)=>subCat.id==inp\u subCatid)
));
}
然后您将能够像这样使用:

this.subcategory服务.getSubCategories(subCatid)
.订阅(子类别=>this.subCat=子类别);
如果我正确解释你的方法,我觉得你在使用firebase。。。如果是这样,在您第一次调用
this.yourService.getSubCategories(subcategories)(subcatoid)
后,您的订阅将保持活动状态,以便您的子类别将针对数据库的每次更改进行更新,即使您更改了
subcatoid
,以前的数据库查询也将处于活动状态。为了避免这种情况,我建议您只使用一次
snapshotChanges()

getSubCategories(inp\u subCatid:string):可观察{
返回此.getSubCategoriesList().snapshotChanges().pipe(
//收到第一个值后完成订阅
以(1)为例,
map(changes=>changes.map(c=>
({key:c.payload.key,…c.payload.val()})
).filter((subCat)=>subCat.id==inp\u subCatid)
));
}

您的方法应该如下所示:

getSubCategories(inp\u subCatid:string):可观察{
返回此.getSubCategoriesList().snapshotChanges().pipe(
map(changes=>changes.map(c=>
({key:c.payload.key,…c.payload.val()})
).filter((subCat)=>subCat.id==inp\u subCatid)
));
}
然后您将能够像这样使用:

this.subcategory服务.getSubCategories(subCatid)
.订阅(子类别=>this.subCat=子类别);
如果我正确解释你的方法,我觉得你在使用firebase。。。如果是这样,在您第一次调用
this.yourService.getSubCategories(subcategories)(subcatoid)
后,您的订阅将保持活动状态,以便您的子类别将针对数据库的每次更改进行更新,即使您更改了
subcatoid
,以前的数据库查询也将处于活动状态。为了避免这种情况,我建议您只使用一次
snapshotChanges()

getSubCategories(inp\u subCatid:string):可观察{
返回此.getSubCategoriesList().snapshotChanges().pipe(
//收到第一个值后完成订阅
以(1)为例,
map(changes=>changes.map(c=>
({key:c.payload.key,…c.payload.val()})
).filter((subCat)=>subCat.id==inp\u subCatid)
));
}
非常感谢

如果我想筛选特定数据,该怎么办??比如“id”

非常感谢

如果我想筛选特定数据,该怎么办??比如“id”


如果要在其他地方订阅,则不能在
getSubCategories
中订阅。如果你想在其他地方订阅,你不能在
getSubCategories
中订阅。不用订阅就退回吧非常感谢@julianobrasil。。。还有一个问题。如果我想筛选特定数据,该怎么办??就像“id”一样,视情况而定。提供有关要筛选的位置/内容的更多详细信息。把它放在你的问题中。好的,我用一个参数“inp_subCatId”编辑我的评论并订阅方法。。。希望对你有所帮助。我已经更改了答案,并在最后添加了一些重要信息。你好@julianobrasil你能帮我解决一个关于物品的附加问题吗?非常感谢@julianobrasil。。。还有一个问题。如果我想筛选特定数据,该怎么办??就像“id”一样,视情况而定。提供有关要筛选的位置/内容的更多详细信息。把它放在你的问题中。好的,我用一个参数“inp_subCatId”编辑我的评论并订阅方法。。。希望对你有所帮助。我已经更改了答案,并在最后添加了一些重要信息。嗨@julianobrasil你能帮我解决一个关于物体的附加问题吗
this.SubCategoryService.getSubCategoriesById(subCatid).subscribe((subCategories: any) => {
  this.subCat = subCategories ;
})
getSubCategoriesbyId(inp_subCatid): Observable<any>{
  this.getSubCategoriesList().snapshotChanges().pipe(
    map(changes =>
      changes.map(c =>
        ({ key: c.payload.key, ...c.payload.val() })
      )
    )
  ).subscribe(subCategories => {
     subCategories.filter(function (subCat) {
    return subCat.id == inp_subCatid;
  });
  });
}
this.yourService.getSubCategoriesbyId(subCatid)
  .subscribe(subCategories => console.log(subCategories));