gpt4 book ai didi

ios - 链接依赖的可观察对象

转载 作者:搜寻专家 更新时间:2023-11-01 07:18:30 25 4
gpt4 key购买 nike

我需要创建依赖 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 来创建报告步骤,其中 report.ID是需要的。

该代码看起来一切正常,但当我需要在每个步骤(createReportcreateReportStep)之后做一些事情时,问题就来了。我将代码放在 onNext 中 block ,但它只在两个步骤完成后调用一次。

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

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

这会像我想要的那样发出两个信号,但我又从哪里获得更新 report.ID从传递到createReportStep

最佳答案

如果您不介意时间部分,只需要访问 reportcreateReportStep(reportID:) 返回的内容,您可以使用在 flatMap 的 block 中创建一个元组

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

生成的可观察对象将在一个元组中包含这两个结果。


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

let report = ApiManager.shared
.createReport(report: report)
.share()

let reportStep = report.map { $0.ID }.flatMap(ApiManager.shared.createReportStep)

Observable.concat([report, reportStep])

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

关于ios - 链接依赖的可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40485563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com