現在、私はPromiseKitを既存のプロジェクトに統合する必要があるかどうか調査中です。PromiseKit(オプション約束あり)
私の主な問題は、最大5つのWebサービスを呼び出すことができるビジネスロジックを実装する必要があることです。以前のものの結果に応じて呼び出されるものもあります。
現在のアーキテクチャは、互いに呼び出すクロージャを使用していくつかの関数でコードを分割することに基づいています。
PromiseKit(または何か他のもの)で管理しやすいコードを書くことができるかどうかを調べようとしています。ここで
は私が行って必要なもののいくつかの擬似コードです:totiGの答えに基づいて
// if true, the phone validation is skipped
let forceRequest = false
// true if a 3rd party web-service has checked the phone number
let isVerified = true
// true if the 3rd party checked the phone number and it is valid
var isValid = false
if !isVerified {
// update value from 3rd party web-service
isValid = isValidPhoneNumberPromise()
}
// If the phone no is invalid stop execution (unless forced)
if !isValid && !force {
throw MyError.error1
}
// web request to create order
createOrderPromise()
// if we have a valid phone number, first send an SMS, then update log
if isValid {
sendSmsPromise()
updateLogPromise()
}
、私は以下のバリエーションで来た:
var isValid = isValid
firstly
{
return Controller.verify(isVerified: isVerified, isValid: isValid)
}
.then { _isValid -> Promise<Int> in
isValid = _isValid
return Controller.createOrder()
}
.then
{ _ -> Promise<Bool> in
if isValid {
return Controller.isSendSms()
}
return Promise (value: true)
}
.then
{ _ -> Promise<Bool> in
if isValid {
return Controller.updateLog()
}
return Promise (value: true)
}
.catch
{ error in
print (error)
}
ありがとうございました。こんにちは、私はあなたのコードのバリエーションを使用して終了した(質問の編集を参照してください)、あなたが私のアプローチの問題を参照してください私に教えてください。 –
コードは機能しますが、すべての関数でisValidプロパティがtrueであることを確認しています。プロミスは、前のステップが有効な場合にのみ次のステップが実行されるように機能します。私の例のように、検証が失敗したときにエラーを返します(または例外をスローする可能性があります)。これによりcatch関数が実行され、どこでもisValidのチェックを心配する必要はありません。 – totiG
最後の2つの約束事はオプションであるという問題があります。電話番号が有効な場合にのみ実行する必要があります。私がそれらを呼ばないと、エラーとはみなされません。 –