【发布时间】:2019-03-01 12:57:54
【问题描述】:
免责声明:这是一个“良好的编程实践”问题,而不是“修复我的损坏代码”问题。
环境
Angular 5.2.9、Angular Material 5.2.4、Typescript 2.4.2、Rxjs 5.5.8
问题
我正在使用角度材质库的 mat-dialog 组件,并订阅从 afterClosed() 返回的 observable。在该订阅中,我有一个简单的 if 语句。如果返回value,则返回value,否则返回null。我的 tslint 非常讨厌从异步订阅内部返回。确切的错误是,“TS2355:声明类型既不是 'void' 也不是 'any' 的函数必须返回一个值。”
代码
private openModal() : string {
// some setup code
this.dialog.open(MyModalComponent, configModal)
.afterClosed()
.subscribe(( data : string ) => {
if ( data ) {
return data;
} else {
return null;
}
});
// cant put return here, this will execute before modal returns data
}
问题
我想为我的函数指定一个返回类型“字符串”,但这意味着我需要从同步函数 openModal() 中执行实际返回,而不是订阅中的异步代码。我愿意接受有关如何改进此代码的所有建议。谢谢!
【问题讨论】:
-
您应该将数据分配给您的组件属性之一 --> this.yourVarName = data
标签: angular typescript rxjs observable