新手问题:
我正在尝试将数据从rest导出到firebase。
我使用的是Angular6和RxJS 6。
getByTag(tag:string) {
return this.http.get(this.URL + '/get/listings/', { headers })
.pipe(
map((res: Listings) => res.items),
// How do I add an additional property to each of these items? eg res.items.inserted = new Date();
// How do chain each of these res.items to another function called exportToFirebase(res.item))
);
}我的数据如下所示:https://pasteboard.co/HWp1hUb.jpg
我尝试了map函数,但是我从API传入的数据流是一个数组,所以我尝试了mergeMap,但没有成功(https://www.learnrxjs.io/operators/transformation/mergemap.html)。
我尝试了一个do()语句来触发exportToFirebase(res.item),但是看起来我完全偏离了轨道:-P
预期结果:创建一个循环,将类型为清单的项参数发送到我的服务函数exportToFirebase(res.item)
问题?
res.items.inserted = new Date();?res.items链接到另一个名为exportToFirebase(res.item))的函数?发布于 2019-01-15 16:36:28
在您的情况下,mergeMap是无用的,因为它是为扁平的可观测值创建的。
因此,map操作符应该完成所有的工作。
getByTag(tag:string) {
return this.http.get(this.URL + '/get/listings/', { headers })
.pipe(
map((res: Listings) => res.items),
map((list: any[]) => {
return list.map(sublist => sublist.map(item => {...item, inserted: new Date()}));
})
);
}更新
可以使用reduce将数组扁平化。
map((res: Listings) => res.items.reduce(((arr, list) => arr.concat(list), [])),
map((list: any[]) => {
return list.map(item => {...item, inserted: new Date()});
})要链接,可以使用do/tap
tap((list: any[]) => {
list.forEach(item => {
exportToFirebase(item)
});
})所以exportToFirebase的实际执行就在您这一边,如果它返回可观察的或smth,那么这个函数的签名是什么?
发布于 2019-01-15 16:43:55
如果我已经正确地理解了您的问题,并且您希望在结果数组中的每个项中添加一个字段,然后将每个字段分别传递给exportToFirebase()函数,那么这样的内容可能是有用的:
getByTag(tag:string) {
return this.http.get(this.URL + '/get/listings/', { headers })
.pipe(
map((res: Listings) => res.items)
)
.subscribe(items => {
items.forEach(i => {
i.inserted = new Date();
exportToFirebase(i);
});
});
}您也可以使用攻丝操作符,这是另一个提到的答案,如果您不想使用订阅。
https://stackoverflow.com/questions/54181320
复制相似问题