Javascript 如何始终如一地执行可观察并结合结果
我对可观察链有问题,无法找到决策。 我需要等待IndexedDB的结果,将其推送到下一个请求,并将两个结果合并到最后一个可观察到的结果中。 下面是一个例子:Javascript 如何始终如一地执行可观察并结合结果,javascript,rxjs,Javascript,Rxjs,我对可观察链有问题,无法找到决策。 我需要等待IndexedDB的结果,将其推送到下一个请求,并将两个结果合并到最后一个可观察到的结果中。 下面是一个例子: const first$ = Database.gelAll(store); // return Observable first.mergeMap((data) => { const uuids = data.map((v) => { return v.uuid; }); // here i need t
const first$ = Database.gelAll(store); // return Observable
first.mergeMap((data) => {
const uuids = data.map((v) => {
return v.uuid;
});
// here i need to send request with 'uuids' array and combine result with
values from first request
const second$ = database.find(store, {'uuid': uuids}); // return Observable
});
谢谢您的建议。如果我理解正确,您正在尝试使您的可观察对象的最终结果是一个对象,它既包含来自
数据库的结果。gelAll
也包含来自数据库的结果。find
。为此,只需在数据库.find
之后添加一个.map语句,并将其返回到合并映射
Database.gelAll(store)
.mergeMap((data) => {
const uuids = data.map((v) => v.uuid);
return database.find(store, {'uuid': uuids})
.map((databaseResult) => {
// Combine with data in some fashion
return {
firstData: data,
secondData: databaseResult
}
});
})
.subscribe(objectWithBothFirstDataAndSecondData => {
console.log(objectWithBothFirstDataAndSecondData)
});
此外,您应该考虑<代码> .CyMeMaP < /C>是否合适。如果
.gelAll
只发出一个值,则应该可以,但在大多数情况下,.switchMap
或.concatMap
比.mergeMap
更好。使用mergeMap,您无法保证订单。Switchmap确保只使用最新版本,concatMap确保所有内容都能通过,但它们按照要求的顺序通过。您还没有告诉我们问题所在。和mergeMap
创建并返回一个新的可观察对象,但它看起来并不像您将其分配给任何对象。谢谢。这是我一直在寻找的答案,谢谢你对地图的解释。