如何一致地执行Observable并结合结果

时间:2017-09-29 09:59:37

标签: javascript rxjs

我对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
});

感谢您的任何建议。

1 个答案:

答案 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确保一切都通过,但它们按照要求的顺序通过。