如何从订阅返回值?下面的代码引发异常
声明类型既不是“ void”也不是“ any”的函数必须返回值。
getNotificationType(_activatedRouter: ActivatedRoute):Observable<number>{
_activatedRouter.params.subscribe(params => {
const menuId = params['id'];
if (menuId) {
return this.masterDataService.getNotTypeByMenu(menuId).subscribe(res => {
if (res){
return res.notificationType;
}
})
}
});
}
答案 0 :(得分:0)
首先:不可能,因为您正在处理异步操作。 一种帮助您的方法是将值分配给订阅中类的字段,并使函数类型为空。
您似乎对Observable有误解。 函数的Observable返回类型的确意味着您需要返回可以订阅的内容,而不是订阅的发出值。
如果您确实想获取有问题的数字,则首先应避免订阅某个子脚本中的可观察对象,因为这是导致大量内存泄漏的理想来源。也许会像switchmap
这样。您的代码可能首先会变成类似以下内容:
getNotificationType$(_activatedRouter: ActivatedRoute):Observable<number>{
return _activatedRouter.params.pipe(
switchmap(params => {
const menuId = params['id'];
if (menuId) {
return this.masterDataService.getNotTypeByMenu(menuId);
} else {
throwError() // or whatever you need to do in your specific case possibly include a catch
}
}));
}
由于您正在使用Observables,因此最好以人为的方式进行尽可能少的订阅,因为这最终会简化您的清理工作。
对于您的具体情况,了解您如何使用想要接收的号码会很有帮助。
您是否愿意分享您的特定用途,以便我们为您量身定制特定的解决方案?