2017-05-18 37 views
1

ReactiveSwift有這個很棒的功能,叫做flatMapError,它允許你在發生錯誤時用事件流進行響應。一個簡單的例子可能是:PromiseKit flatMapError

authenticationProducer.flatMapError { _ in self.reauthenticate() } 

每當出現錯誤,該錯誤被映射到試圖重新認證生產商。

我將如何建立一個使用PromiseKit的類似操作符?函數簽名看起來像:

func flatMapError<U>(_ transform: @escaping (Error) -> Promise<U>) -> Promise<U> 

我實施至今:

func flatMapError<U>(_ transform: @escaping (Error) -> Promise<U>) -> Promise<U> { 
    return Promise<U> { resolve, reject in 
     self.catch { error in 
      let promise = transform(error) 
      let _ = promise.then { value in 
       resolve(value) 
      } 
     } 
    } 
} 

回答