我想弄清楚如何等待多个期货完成。我知道如何异步等待它们:
summaryFuture.whenSuccess {}但这只是处理一种情况。我需要等待 summaryFuture 和sponsorFuture 完成,然后在发回响应之前处理两者。
let summaryFuture = client.post(summaryURL) { post in
post.http.headers.add(name: "authtoken", value: token)
}.flatMap(to: SummaryModel.self) { (response) in
return try response.content.decode(SummaryModel.self)
}
let sponsorEnrollerFuture = client.post(sponsporEnroller) { post in
post.http.headers.add(name: "authtoken", value: token)
}.flatMap(to: SponsorEnrollerModel.self) { (response) in
return try response.content.decode(SponsorEnrollerModel.self)
}
Run Code Online (Sandbox Code Playgroud)
您可以使用.and或.flatten
因为.flatten你的期货应该返回Void,所以最终结果Future<Void>也是如此。
.and 可以这样使用
let summaryFuture = client.post(summaryURL) { post in
post.http.headers.add(name: "authtoken", value: token)
}.flatMap(to: SummaryModel.self) { (response) in
return try response.content.decode(SummaryModel.self)
}
let sponsorEnrollerFuture = client.post(sponsporEnroller) { post in
post.http.headers.add(name: "authtoken", value: token)
}.flatMap(to: SponsorEnrollerModel.self) { (response) in
return try response.content.decode(SponsorEnrollerModel.self)
}
// Now combine the two futures
return summaryFuture.and(sponsorEnrollerFuture).map { summary, sponsorEnrolled in
print("summary: \(summary)")
print("sponsorEnrolled: \(sponsorEnrolled)")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2056 次 |
| 最近记录: |