我对Observable链存在问题,无法找到决定。 我需要等待IndexedDB的结果,将其推送到下一个请求并在最后一个Observable中合并两个结果。 这是一个例子:
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
});
感谢您的任何建议。
答案 0 :(得分:-1)
如果我理解正确,那么你正试图让它成为你的observable的最终结果是一个包含Database.gelAll
结果和database.find
结果的对象。为此,您只需在database.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)
});
此外,您应该考虑.mergeMap
是否合适。如果.gelAll
只发出一个值,那么它应该没问题,但在大多数情况下,.switchMap
或.concatMap
是比.mergeMap
更好的选择。使用mergeMap,您无法保证订单。 Switchmap确保只使用最新版本,concatMap确保一切都通过,但它们按照要求的顺序通过。