Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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 Typescript:将一个方法作为另一个方法的参数传递_Javascript_Angular_Typescript_Ecmascript 6 - Fatal编程技术网

Javascript Typescript:将一个方法作为另一个方法的参数传递

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

在我的angular应用程序中,我进行了以下处理:

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
),然后回调就不需要了,只要你约束密钥以确保它是组件的成员,否则您将失去类型安全性。