javascript - 将一个 RxJS observable 的结果传递到下一个连续的 observable

标签 javascript rxjs

我正在尝试对 RxJS HTTP 调用进行基本链接,其中第一个调用将在服务器端创建的对象的 ID 传递到第二个调用中。我在实现中观察到的是,仅进行了第一个调用,而第二个链式调用从未执行。

下面是我的大致代码。

第一次通话:

createItem(itemData) {
  return this.http.post(createUrl, itemData)
    .map((res) => res.json())
    .catch(this.handleError);
}

第二次调用:

addFileToItem(id, file): Observable<any> {
  return this.http.post(secondUrl + id, file)
    .map((res) => log(res))
    .catch(this.handleError);
}

函数定义将一个调用映射到另一个调用:

createAndUpload(itemData, file): Observable<any> {
  return createItem(itemData, file)
    .map((res) => {
      if (file) {
        return addFileToItem(res.id, file);
      }
    });
}

最后,可观察对象是通过 subscribe() 执行的:

someFunction(itemData, file) {
  createAndUpload(itemData, file)
    .subscribe(res => {
      log(res);
      //go do something else
    };
}

最佳答案

问题出在 createAndUpload 中,其中 map 只是将第一次调用的结果转换为 Observable,但你从未订阅它。

简单地说,您只需要使用 mergeMap (或 concatMap 在这种情况下并不重要)而不是 mapmergeMap 运算符将订阅内部 Observable 并发出其结果:

createAndUpload(itemData, file): Observable<any> {
  return createItem(itemData, file)
    .mergeMap((res) => {
      if (file) {
        return addFileToItem(res.id, file);
      }
      return Observable.empty(); // you can't return `undefined` from the inner Observable
    });
}

关于javascript - 将一个 RxJS observable 的结果传递到下一个连续的 observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49285285/

相关文章:

javascript - 在 Prop 中提取对象

javascript - 如何通过 JavaScript 重新加载我的 chrome 扩展?

javascript - RxJS 计算悬停在按钮上的时间

javascript - 带有 TypeScript 错误的 Angular HTTP GET http.get(...).map 不是 [null] 中的函数

angular - .map 运算符后打印的 NaN 值

javascript - 如何在 if 语句中使用按钮值和对象值来检查正确答案(做测验)

javascript - ReactJS 和 enzyme : Matching elements contents to string

javascript - 如何使用 JavaScript 提交 JSONRPC 请求

javascript - 如何解析多个 Observable

javascript - 无法在 Angular 5 中将 http 响应作为字符串获取