【发布时间】:2020-09-23 04:06:29
【问题描述】:
我有这段代码,它使用两个管道来加载产品实例及其播放列表。如果加载播放列表时出错,该属性设置为null:
getProduct(productId: number): Observable<ProductDTO> {
return this.internalFindOne(productId).pipe(
flatMap((productDTO: ProductDTO) => {
return this.productPlaylistService.getProductPlaylist(productId).pipe(
map((productPlaylistDTO: ProductPlaylistDTO) => {
productDTO.playlist = productPlaylistDTO;
return productDTO;
}),
catchError(() => {
// If product playlist doesn't find anything, we still have to return the product dto object
productDTO.playlist = null;
return of(productDTO);
}),
);
})
);
}
它已经以这种方式工作了。但是,我认为flatMap 不适合这里。没有编译器错误,但据我所知flatMap 以 1:n 方式工作,而 map 以 1:1 fashion 工作。我的代码期望 productDTO 作为此处的输入并返回相同的 productDTO 修改。但是当我用map 替换flatMap 调用时,嵌套的map 函数停止被调用(无论是成功部分还是错误部分)。
ProductDTO 和 ProductPlaylistDTO 不是可迭代的类。
我在这里误会了什么?
【问题讨论】:
标签: typescript rxjs nestjs