Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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 我可以将外部函数传递给RxJs订阅吗?_Javascript_Angular_Typescript_Rxjs - Fatal编程技术网

Javascript 我可以将外部函数传递给RxJs订阅吗?

Javascript 我可以将外部函数传递给RxJs订阅吗?,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,如果我选中RxJS subscribe方法,我可以看到: subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription; 因此,我编写了如下示例init函数: private init(): void{ this.dataBaseService.fetchPersons().subscribe( (persons:

如果我选中RxJS subscribe方法,我可以看到:

    subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
因此,我编写了如下示例init函数:

  private init(): void{
this.dataBaseService.fetchPersons().subscribe(
   (persons: Person[]) => {
    this.behaviorSubject.next(persons);
    this.subject.next(persons);
  },
  error => console.error(error),
  () => console.log('Complete!')
);
}

Typescript中是否需要为参数提供lambda函数?我可以在其他地方创建函数并将其作为参数提供吗

例如,此功能:

       (persons: Person[]) => {
    this.behaviorSubject.next(persons);
    this.subject.next(persons);
  }
在上层类中创建,然后将其作为参数提供

好的,所以我尝试在类中创建一个方法:

  someFunction( persons: Person[] ){
this.behaviorSubject.next(persons);
this.subject.next(persons);
}

并尝试将其传递给init函数

    private init2(): void {
  this.dataBaseService.fetchPersons().subscribe(
    this.someFunction(),
    error => void,
    () => console.log('Complete!');
  )
}
我收到一个错误:

An argument for 'persons' was not provided.

如果它初始化了上面的方法,我必须提供什么样的参数?

您需要在不使用
()
的情况下传递函数,否则它会立即被调用:

someFunction( persons: Person[]) {
    this.behaviorSubject.next(persons);
    this.subject.next(persons);
}
    
private init2(): void {
    this.dataBaseService.fetchPersons().subscribe(
        this.someFunction, // <- pass it without ()
        error => void,
        () => console.log('Complete!')
    )
}
    
someFunction(个人:个人[]){
this.behaviorSubject.next(人);
本.主题.下(人);
}
私有init2():void{
此.dataBaseService.fetchPersons().subscribe(
this.someFunction,//void,
()=>console.log('Complete!')
)
}

您需要在不使用
()
的情况下传递函数,否则它会立即被调用:

someFunction( persons: Person[]) {
    this.behaviorSubject.next(persons);
    this.subject.next(persons);
}
    
private init2(): void {
    this.dataBaseService.fetchPersons().subscribe(
        this.someFunction, // <- pass it without ()
        error => void,
        () => console.log('Complete!')
    )
}
    
someFunction(个人:个人[]){
this.behaviorSubject.next(人);
本.主题.下(人);
}
私有init2():void{
此.dataBaseService.fetchPersons().subscribe(
this.someFunction,//void,
()=>console.log('Complete!')
)
}


为什么不试试呢?是的,你可以。是的,你只需要提供一个可调用的函数。。。它不一定是lambda函数,你可以!但是要小心你的
这个
:)我已经编辑了我的帖子,我不知道如果它实际上是一个初始设置,我应该提供什么参数只要将它作为
这个传递。没有
()
的某个函数你为什么不试试呢?是的,你可以。是的,你只需要提供一个可调用的函数。。。它不一定是lambda函数,你可以!但是要小心你的
这个
:)我已经编辑了我的帖子,我不知道如果它实际上是一个初始设置,我应该提供什么参数只要把它作为
这个传递就行了。没有
()
的函数可以工作谢谢!但我不知道它是如何运作的,行为主体和主体会接受人们的争论吗?是的,会。如果您不确定,或者只是想编写更清晰的代码,您也可以传递
person=>this.someFunction(person)
,而不是
this.someFunction
@darkfurby我会小心,因为在某些情况下在函数内部使用
this
可能会中断。我发现,在计划将函数用作变量/参数时,最好将函数声明为一个字段,如
someFunction=(…)=>{…}
,我已经无数次地使用了这两个字段,从未见过它以某种方式损坏,但如果不是这样的话,我会非常乐意看到它-你有一个例子吗@H0SS这里有一个范围界定失败的例子,我想在OPs示例中它会很好,但了解某些方法的局限性总是有用的,谢谢!但我不知道它是如何运作的,行为主体和主体会接受人们的争论吗?是的,会。如果您不确定,或者只是想编写更清晰的代码,您也可以传递
person=>this.someFunction(person)
,而不是
this.someFunction
@darkfurby我会小心,因为在某些情况下在函数内部使用
this
可能会中断。我发现,在计划将函数用作变量/参数时,最好将函数声明为一个字段,如
someFunction=(…)=>{…}
,我已经无数次地使用了这两个字段,从未见过它以某种方式损坏,但如果不是这样的话,我会非常乐意看到它-你有一个例子吗@h0ss这里有一个范围界定失败的例子,我想在OPs示例中,它会很好,但了解某些方法的局限性总是很有用的