私のアプリケーションで実行する必要がある非同期のネットワークタスクがいくつかあります。サーバーから取得する必要があるリソースが3つあり、A
、B
、およびC
とします。 B
またはC
のいずれかを取得する前に、まずリソースA
の取得を完了しなければならないとします。場合によっては、最初にB
を取り込み、他の時はC
を先に取り出すことがあります。すぐに非同期タスクを実行する
は今のところ、私はちょうどそのような長鎖の閉鎖を持っている:
func fetchA() {
AFNetworking.get(completionHandler: {
self.fetchB()
self.fetchC()
})
}
これは今のところ動作しますが、明らかな制限は、私が完了ハンドラに実行順序をハードコーディングされてきていますfetchA
。今、私は唯一のfetchB
後fetchC
は、その完了ハンドラに仕上がっているしたいと言っ行うにはいくつかの魔法の方法がある場合は、私が知りたいのですが、基本的に
... fetchB
のための私の実装を変更行かなければならないだろう以下のようなもの:
let orderedAsync = [fetchA, fetchB, fetchC]
orderedAsync.executeInOrder()
fetchA
、fetchB
、およびfetchC
は、すべての非同期機能ですが、fetchA
はそうで終了してしまうまでfetchB
は実行されません。ありがとう!
AFNetworkingではなくAlamofireの使用を検討することもできます。それは同じ著者によるものですが、迅速な解決策です。しかし、依然として非同期タスク、PromiseKit、要求をラップするための非同期の 'Operation'サブクラス、または同様のものを処理するために何かを行う必要があります。 – Rob
AFNetworkingの中にいた場合は、少しNSOperationラッパーを実行しました。https://github.com/robertmryan/AFHTTPSessionOperation – Rob