2017-11-22 10 views
0

PromiseKit을 사용하여 네트워크 호출을 처리하고 있습니다. 약속을 일찍 이행하거나 거부하는 대회 나 깨끗한 방법이 있는지 확인하려고합니다. 아래에 나와 있듯이 일찍 성취하거나 거절해야하는 몇 가지 조건이 있습니다. 저는 현재 바로 뒤에 return 문장을 쓰고 있습니다. 나는 이것이 다소 혼란스럽고 이것을 할 수있는 더 좋은 방법이 있는지 궁금해하고 있습니다. 감사!PromiseKit 규칙 준수 및 거부

return PromiseKit { fulfill, reject in 
    if statusCode == 200 { 
    if conditionA { 
     if conditionB { 
     fulfill(...) // How do I stop the execution chain from here 
     return 
     } else { 
     reject(...) // Or here, without having to call return every time 
     return 
     } 
    } 
    reject(...) 
    } 
} 

답변

1

이행 및 거부를 사용하는 대신 약속 완료 결과를 반환 할 수 있습니다. 나는 당신을 보여주는 기능을 만들었습니다 아래 그것을 할 수있는 방법 :

func someMethod(statusCode: Int, conditionA: Bool, conditionB: Bool) -> Promise<Any> { 
    if statusCode == 200 { 
     if conditionA { 
      if conditionB { 
       return Promise(value: "Return value") 
      } else { 
       return Promise(error: PromiseErrors.conditionBInvalid) 
      } 
     } 
    } 
    return Promise(error: PromiseErrors.invalidStatusCode) 
} 

enum PromiseErrors: Error { 
    case invalidStatusCode 
    case conditionBInvalid 
} 

fullfill에와 거부 사용하지 않음으로써, 당신은 또한 코드를 정리할 수 있으며, 같은 새로운 기능에 조건 b 확인을 이동 :

func someMethod(statusCode: Int, conditionA: Bool, conditionB: Bool) -> Promise<Any> { 
    if statusCode == 200 { 
     if conditionA { 
      return conditionASuccess(conditionB: conditionB) 
     } 
    } 
    return Promise(error: PromiseErrors.invalidStatusCode) 
} 

    func conditionASuccess(conditionB: Bool) -> Promise<Any> { 
    if conditionB { 
     return Promise(value: "Return value") 
    } 
    return Promise(error: PromiseErrors.conditionBInvalid) 
} 

Foundation 용 PromiseKit 확장 프로그램을 사용하고 있습니까? Promises를 사용하여 네트워킹 호출을 단순화하는 데 도움이됩니다. 여기에 확장자를 가져올 수 있습니다. https://github.com/PromiseKit/Foundation

+0

오, 이런! 정말 고마워. 나는 그 대답을 받아 들였다. – 7ball

+0

괜찮 으면 몇 가지 빠른 후속 조치 : 왜 우리가 원래의 질문에서했던 것처럼 "성취하고 거절"을 사용하여 귀찮게해야합니까? – 7ball

+1

그렇게하는 것이 적절한 경우가 있습니다. PromiseKit에는 '대리자 배치'예제가 있습니다. http://promisekit.org/docs/cookbook/wrapping-delegation/ - 나중에 약속이 반환되는 지연 약속을 반환합니다. 이 시나리오에서는 약속을 반환 했으므로 새 약속 인스턴스를 반환하지 않고 약속을 수행하거나 거부해야합니다. – totiG