如何在 Vapor Swift 中等待多个期货完成?

Eth*_*han 3 xcode swift vapor

我想弄清楚如何等待多个期货完成。我知道如何异步等待它们: 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)

imi*_*ike 6

您可以使用.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)