I am trying to figure out how to wait for multiple Futures to complete.
I know how to asynchronously wait for them with:
summaryFuture.whenSuccess {} but that just handles one case. I need to wait for both summaryFuture and sponsorFuture to finish, then work with both before sending back a Response.
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)
}
You could use either .and or .flatten
For .flatten your futures should return Void, so the end result will be Future<Void> as well.
.and may be used like this
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)")
}
Okay. I figured it out.
To wait for multiple Futures to complete, you have to use .add. In my particular case.
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
let multipleFutures = summaryFuture.add(sponsorEnrollerFuture)
// Now I can use
mutipleFutures.whenSuccess = {(summary, sponsorEnroller) in ...}