promiseKit
非同期タスクを注文する方法として利用するアプリをセットアップしています。現在、2 つの非同期関数 ( と呼ばれるpromises
) が順番に実行され (1 と 2 と呼びます)、別の関数セット (3 と 4) が順番に実行されるように設定しています。だいたい:
import PromiseKit
override func viewDidAppear(_ animated: Bool) {
firstly{
self.promiseOne() //promise #1 happening first (in relation to # 1 and #2)
}.then{_ -> Promise<[String]> in
self.promiseTwo()//promise #2 starting after 1 has completed
}
.catch{ error in
print(error)
}
firstly{
self.promiseThree()//Promise #3 happening first (in relation to #3 and #4)
}.then{_ -> Promise<[String]> in
self.promiseFour()//Promise #4 starting after #3 has completed
}.
.catch{ error in
print(error)
}
}
それぞれfirstly
が、2 番目の関数が開始される前に最初の関数が完了していることを確認することで、関数内の順序を保証します。2 つの別々firstly
の を使用すると、1 が 2 の前に実行され、3 が 4 の前に実行され、 (重要なことに) 1 と 3 がほぼ同時に開始されます ( の開始時viewDidAppear()
)。1 と 3 は互いに関連がなく、問題なく同時に開始できるため、これは意図的に行われます (2 と 4 も同様です)。問題は、 2 と 4 が完了した後にのみ実行するpromiseFive
必要がある 5 番目の約束があることです。1つだけリンクできますfirstly
順序が 1,2,3,4,5 であることを確認しますが、1/2 と 3/4 の順序は関係ないため、この方法でそれらをリンクすると時間が無駄になります。2 と 4 の両方の完了時にのみ実行されるようにこれを設定する方法がわかりませんpromiseFive
。2 と 4 の両方の最後にブール値チェックされた関数呼び出しを行うことを考えましたfirstly
。promiseFive
ただし、これらは非同期で開始されるため(1/2 と 3/4)、promiseFive
このアプローチではまったく同時に両方から が呼び出される可能性があり、明らかに問題が発生します。これについて最善の方法は何ですか?