簡體   English   中英

如何在Vapor Swift中等待多個期貨完成?

[英]How to wait for multiple futures to complete in Vapor Swift?

我試圖弄清楚如何等待多個期貨完成。 我知道如何使用以下方法異步等待它們: 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)
    }

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

好的。 我想到了。

要等待多個Future完成,您必須使用.add 在我的情況下。

 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 ...}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM