我需要为POST请求生成此结果:
{
"names": [
{
"id": "t3xcb9xAyX",
"username": "Gennaro"
},
{
"id": "Csdu65RKon",
"username": "Marco"
},
...
],
"createdAt":"04/07/2018 - 11.49.51"
}
所以我使用rxjs完成了这项工作:我创建了两个Observable(一个用于名称,一个用于createdAt)并在最后合并:
const notObj = utils.getNotificationType(codeProduct, Parse);
const csvObj = utils.getNotificationType(codeProduct, Parse);
const query = new Parse.Query(notObj);
const dateQuery = new Parse.Query(csvObj).descending('createdAt');
const names = from(query.find())
.map(el => el.map((e) => {
return {
id: e.id,
username: e.get('username')
}
}))
.mergeMap((arr) => Observable.of({
names: arr
}));
const lastUpdate = from(dateQuery.first())
.map(res => moment(res.createdAt).format('DD/MM/YYYY - HH:mm:ss'))
.map(res => {
return {
createdAt: res
}
});
merge(names, lastUpdate)
.subscribe(
(data) => res.send(serialize(data)),
(error) => res.send(serialize(error)),
() => console.log('complete')
);
问题在于,最终合并只能检索我"names"
。使用.zip()
运算符可以得到另一个结果,但是我有一个JSON数组而不是一个对象。
我的问题是:为什么merge()
不合并两个结果而仅合并第一个?谢谢
答案 0 :(得分:4)
这不是merge
所做的。它合并可观察流而不是对象本身。使用forkJoin
会发出一系列结果,然后将其与map
合并:
const names$ = ...;
const lastUpdate$ = ...;
forkJoin(names$, lastUpdate$)
.map(([ names, lastUpdate ]) => ({ names, lastUpdate }))
.subscribe(...)