Javascript 角度等待,直到订阅完成,并给其他函数赋值
我有以下功能 文件:subcategory.service.tsJavascript 角度等待,直到订阅完成,并给其他函数赋值,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() }
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));