1
현재 PromiseKit을 기존 프로젝트에 통합해야하는지 조사 중입니다.PromiseKit (선택형 약속 포함)
내 주요 문제는 최대 5 개의 웹 서비스를 호출 할 수있는 비즈니스 로직을 구현해야한다는 것입니다. 그들 중 일부는 이전의 결과에 따라 호출됩니다.
현재 아키텍처는 서로를 호출하는 클로저를 사용하여 여러 함수에서 코드를 분해 한 것입니다.
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 약속은 선택 사항입니다. 전화 번호가 유효한 경우에만 실행해야합니다. 제가 전화하지 않으면 오류로 간주되지 않습니다. –