2017-09-29 5 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確信しています結局、まれなシナリオでしょうか?

答えて

0

あなたはそれから例の

ルックfulfillrejectを呼び出し、任意のキューにあなたの操作を実行できます。

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はかかりません。デフォルトのケースでは内容を即座に実行し、キューの設定を許可するとその動作が行われるため紛らわしい変数です

関連する問題