我有一个Angular2应用程序,它有一个获取项目列表的服务.有一种方法可以为列表中的每个项目获取更多特定信息.我目前的设置是:
// service for item list class ItemsService { fetchItems(): Observable<Item[]> { return this.http.get(url).map((res: Response) => res.json()); } fetchItemsWithData(): Observable<Item[]> { return this.fetchItems() .flatMap((items: Observable<Item[]>) => items) .map((item: Item) => this.itemService.fetchData(item)) .flatMap((items: Observable<Item[]>) => items) .toArray(); } } // service for individual items class ItemService { fetchData(item: Item) { return this.http.get(`${url}/${item.id}`) .map((res: Response) => res.json()); } }
这实际上就像我需要的那样,即使数组< => observable似乎有点时髦,但它最终给了我一个包含所有项目信息的项目数组的可观察性.
问题是,在返回this.fetchItems()行时我总是得到:
06001
我有点不知所措,因为fetchItems确实返回一个Observable并将其更改为Observable< any>给出了同样的错误.如果我只是将其更改为任何,但我根本没有得到任何错误报告.
有没有更好的类型用于fetchItems?
我怀疑这可能与toArray()有关,它返回Observable< T []>.
在您定义fetchItems()的情况下:Observable< Item []>它使toArray()返回Observable< Observable< Item []> []>这就是为什么即使使用Observable< any>它也会抛出错误.
顺便说一句,我试图用模拟类来模拟你的情况,它编译时没有错误(TypeScript 2.0.3),但也许我在某个地方犯了一个错误,它不相同(?):
class Observable<T> { map(_): Observable<T> { return new Observable<T>() } flatMap(_): Observable<T> { return new Observable<T>() } toArray(): Observable<T[]> { return new Observable<T[]>() } } class Item { } class Response { json() { } } class HTTP { get(_) { return new Observable() } } class ItemsService { itemService = new ItemService(); http = new HTTP(); fetchItems(): Observable<Item[]> { return this.http.get('url').map((res: Response) => res.json()); } fetchItemsWithData(): Observable<Item[]> { return this.fetchItems() .flatMap((items: Observable<Item[]>) => items) .map((item: Item) => this.itemService.fetchData(item)) .flatMap((items: Observable<Item[]>) => items) .toArray(); } } // service for individual items class ItemService { http = new HTTP(); fetchData(item: Item) { return this.http.get('url') .map((res: Response) => res.json()); } }