Javascript Typescript:将一个方法作为另一个方法的参数传递
在我的angular应用程序中,我进行了以下处理:Javascript Typescript:将一个方法作为另一个方法的参数传递,javascript,angular,typescript,ecmascript-6,Javascript,Angular,Typescript,Ecmascript 6,在我的angular应用程序中,我进行了以下处理: this.myServiceOne.getDataOne().subscribe((res => {this.variableOne= res})); this.myServiceTwo.getDataTwo().subscribe((res => {this.variableTwo= res})); this.myServiceThree.getDataThree().subscribe((res => {this.vari
this.myServiceOne.getDataOne().subscribe((res => {this.variableOne= res}));
this.myServiceTwo.getDataTwo().subscribe((res => {this.variableTwo= res}));
this.myServiceThree.getDataThree().subscribe((res => {this.variableThree= res}));
this.myServiceFour.getDataFour().subscribe((res => {this.variableFour= res}));
我的目的是以这种方式生成泛型函数:
loadData(myVariable, myserviceMethod){
serviceMethod().subscribe((res => {pefVar = res}));
}
用这样的方式代替我的治疗:
this.loadData(this.variableOne, this.myServiceOne.getDataOne);
但这似乎不起作用,它无法理解这种注入:(this.myservicecone.getDataOne)
您的建议?若要委派局部变量的设置,您必须传入某种回调(就像您当前在
订阅中所做的那样),或者传递要更新的属性的名称
通过使其通用化,您实际上并没有节省太多的精力,除非有一些重复的代码,这在您的示例中是没有的
如果你真的想写一个泛型函数,你可以从以下方法开始:
回调
从可观察对象返回的对象类型是泛型的。Tee回调接受同一类型的单个参数
loadData(serviceMethod:Observable,action:(值:T)=>void){
订阅((res:T)=>action(res));
}
您会这样调用它:
this.loadData(this.myServiceOne.getDataOne(),res=>this.variableOne=res);
属性名称
TKey
必须是AppComponent
上的命名键
TValue
是指定键的类型和从可观察对象返回的对象的类型
loadData2(
服务方法:可观察,
钥匙:TKey
):无效{
const component:AppComponent=this;
订阅((res:TValue)=>{
组件[键]=res;
});
}
您会这样调用它:
this.loadData(this.myServiceOne.getDataOne(),'variableOne');
属性名称(完全通用)
T
是组件的类型
TKey
必须是T
上的命名键
TValue
是指定键的类型和从可观察对象返回的对象的类型
loadData2(
组成部分:T,
服务方法:可观察,
钥匙:TKey
):无效{
订阅((res:TValue)=>{
组件[键]=res;
});
}
您会这样调用它:
this.loadData(this,this.myServiceOne.getDataOne(),'variableOne');
承诺
您还可以将可观察的转换为承诺并使用async/await,但我真的不明白这样做的意义
演示:通过定义泛型函数,您是否试图找到一种干净的方法来处理初始治疗?你会接受通常的rxjs最佳实践来实现它吗?@YuchaoWu我正在尝试使它几乎通用什么不起作用,你会得到什么错误?也可以传递成员密钥(例如,res=>this[key]=res
),然后回调就不需要了,只要你约束密钥以确保它是组件的成员,否则您将失去类型安全性。