我是angular和rxjs的新手-基本上,我有一个pipe函数,它需要几个运算符,其中一个需要一个带有三元数的“ map”,该三元数是一个空数组或另一个可观察到的值来自http请求:
search = (text: Observable<string>) => {
return text.pipe(
debounceTime(200),
distinctUntilChanged(),
map(term => term.length < 3 ? [] : performSearch(text))
);
}
performSearch(searchTerm: Observable<string>): Observable<Object> {
return this.http.get('/api/header-search-results/con').pipe(
map(res => {
console.log(res);
return res;
})
);
}
我知道我做错了,我只是不知道什么-我在浏览器中遇到错误:
找不到类型为“对象”的其他支持对象“ [对象对象]”。 NgFor仅支持绑定到数组等Iterables
我将不胜感激
答案 0 :(得分:1)
在实现中,merge
运算符将返回一个可观察对象或一个对象。我建议您仅使用对象或仅可观察对象。如果您选择第二种解决方案,则还应考虑根据您的需求来平整您的流concatMap, mergeMap, switchMap, ...
的运算符。
实施示例:
search = (text: Observable<string>) => {
return text.pipe(
debounceTime(200),
distinctUntilChanged(),
concatMap(term => term.length < 3 ? of([]) : performSearch(text))
);
}
performSearch(searchTerm: Observable<string>): Observable<Object> {
return this.http.get('/api/header-search-results/con').pipe(
map(res => {
console.log(res);
return res;
})
);
}
答案 1 :(得分:1)
如果需要返回一个空数组,只需用of()
包装(在RxJS 6中),然后使用map
代替mergeMap
即可订阅返回的内部Observable。
import { of } from 'rxjs';
...
search = (text: Observable<string>) => {
return text.pipe(
debounceTime(200),
distinctUntilChanged(),
mergeMap(term => term.length < 3 ? of([]) : performSearch(text))
);
}