链接依赖观察

我需要创build依赖的API调用,其中第二个需要第一个返回的值。 首先想到的是使用flatMap

ApiManager.shared .createReport(report: report) .flatMap { (report) -> Observable<Report> in return ApiManager.shared.createReportStep(reportID: report.ID) } 

createReport返回Observable<Report> ,在成功调用返回更新后的Report模型(带ID)之后,我需要调用API来创build报告步骤,其中需要report.ID

一切看起来和工作正常的代码,但是当我需要在每个步骤( createReportcreateReportStep )后都需要做些事情时,问题就出现了。 我把代码放在onNext块中,但是在两个步骤完成之后它只被调用一次。

两步之后有没有办法接收onNext信号? 我可以使用这样的东西:

 ApiManager.shared .createReport(report: report) .concat(ApiManager.shared.createReportStep(reportID: report.ID)) 

哪些会emmit像我想要的两个信号,但是,然后再次从哪里得到更新report.ID来传递给createReportStep

如果您不介意time组件,只需要访问reportcreateReportStep(reportID:)返回的createReportStep(reportID:) ,就可以在flatMap的block中创build一个元组

 ApiManager.shared .createReport(report: report) .flatMap { (report) -> Observable<Report> in return ApiManager.shared.createReportStep(reportID: report.ID) .map { (report, $0) } } 

得到的observable将包含一个元组的结果。


如果时间分量很重要,则可以执行以下操作

 let report = ApiManager.shared .createReport(report: report) .share() let reportStep = report.map { $0.ID }.flatMap(ApiManager.shared.createReportStep) Observable.concat([report, reportStep]) 

在这里,重要的一点是share调用。 它将确保createReport只执行一次,但是您将有两个下一个事件请求。