2017-09-29 8 views
0

PromiseKit은 비 주 스레드에서 체인의 일부를 실행하는 데 편리한 방법 thenOn을 제공합니다. 그러나 첫 번째 약속 실행 스레드를 설정하는 편리한 방법은없는 것처럼 보입니다.PromiseKit firstlyOn 스타일 방법

이것은 내 첫 약속에 DispatchQueue.global(x).async을 삽입하거나 더미 첫 약속을 사용한다는 것을 의미합니다.

DispatchQueue 비트를 첫 번째 약속에 넣으면 고장이 난 것처럼 느껴진다. 주된 실행 체인의 스레딩 결정을 개별 약속으로 옮기 겠지만 그 약속 하나만을 위해. 나중에 내 체인에 약속을 덧붙이면 그 스레딩 논리를 모두 움직여야합니다. 좋지 않습니다.

let queue = DispatchQueue.global(qos: .userInitiated) 

    Promise(value:()).then(on: queue) { 

     // Now run first promise function 

    } 

이 확실히 청소기 솔루션이지만, 누군가가 더 나은 솔루션의 알고 있는지 궁금 해서요 ... 난이 ISN 확신 :

은 무엇 내가 최근에 해왔 던 것은 이것이다 결국 드문 시나리오입니까?

그냥

봐 예제 그것에서 fulfill 또는 reject를 호출, 어떤 대기열에 작업을 수행 할 수 있습니다

답변

0

:

override func viewDidLoad() { 
    super.viewDidLoad() 

    firstly { 
     doFirstly() 
     } 
     .then { 
      self.doMain() 
     } 
     .then { 
      self.doLastest() 
     } 
     .catch { error in 
      // handle error 
     } 
     .always { 
      // finish 
    } 
} 

func doFirstly() -> Promise<Void> { 
    return Promise { fulfill, reject in 
     let queue = DispatchQueue.global(qos: .userInitiated) 
     queue.async { 
      // do your operation here 
      fulfill() 
     } 
    } 
} 

func doMain() -> Promise<Void> { 
    return Promise { fulfill, reject in 
     let queue = DispatchQueue.main 
     queue.async { 
      // do your operation here 
      fulfill() 
     } 
    } 
} 

func doLastest() -> Promise<Void> { 
    return Promise { fulfill, reject in 
     let queue = DispatchQueue.global(qos: .userInitiated) 
     queue.async { 
      // do your operation here 
      fulfill() 
     } 
    } 
} 
0

우리는 제공 :

DispatchQueue.global().promise { 
    //… 
} 

firstly은을지지 않습니다 대기열은 내용을 즉시 실행하고 기본 대기열에 대해 대기열을 구성 할 수 있으므로 해당 대기열이 작동합니다. 혼란스럽게 변할 수 있습니다.