我在网上找到了此代码,并试图理解它。
public searchFunctionFactory($index: any): (text: Observable<string>) => Observable<any[]> {
//Create a function that considers the specified $index parameter value
let getCities = (text$: Observable<string>) =>
text$
.debounceTime(300)
.distinctUntilChanged()
.switchMap( query => {
//some logic involving $index here
//...
//query.length < 2 ? [] : this.apiService.getCities(query).catch(() => {
//return Observable.of([]);
});
//Return that "custom" function, which will in turn be called by the ngbTypescript component
return getCities;
}
我的问题与方法签名有关。
public searchFunctionFactory($index: any): (text: Observable<string>) => Observable<any[]>
我了解
$index: any
是Any类型的输入参数。
该函数返回Observable和任何observable。
但是什么是
: (text: Observable<string>)
是第二个参数吗?
如果第二个参数不应该
public searchFunctionFactory($index: any ,text: Observable<string>) => Observable<any[]>
答案 0 :(得分:1)
这表示searchFunctionFactory
函数的返回值是一个采用参数text
(类型为Observable<string>
)并调用 that 的函数。函数返回Observable<any[]>
。这是一个高阶函数。
public searchFunctionFactory($index: any): (text: Observable<string>) => Observable<any[]> {
/* ^^^^^^^^^^^ searchFunctionFactory parameter */
public searchFunctionFactory($index: any): (text: Observable<string>) => Observable<any[]> {
/* searchFunctionFactory return value ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
如注释所述,这不是Javascript语法,而是Typescript语法。
所以,如果您致电
const result = searchFunctionFactory(someVar);
result
将是
(text: Observable<string>) => Observable<any[]>
然后您可以用
进行调用const resultTwo = result(someOtherVar)
获取类型为Observable<any[]>
的值。