メモ。
BrightFuturesで非同期処理実行後にクラッシュしてしまう不具合があった。原因がわからず数回試行してみて、下記のメッセージ部分でクラッシュしていることがわかった。
Attempted to completed an Async that is already completed. This could become a fatal Error.
なぜ、Asyncが終了してしまっているのか理由がわからなかったが2回終了させていた。実際にはもう少し複雑な条件があるんだけど、クラッシュしていたのは以下のような場合でした。
static func foo() -> Future<Bool, APIError> { let promise = Promise<Bool, APIError>() Alamofire.request(ConstValues.uri).responseJSON { (response) in if isBoo { promise.success(true) } promise.failure(APIError.invalidOperation) } return promise.future }
if文の判定で処理が成功したと判定してpromise.success(true)
を返しておきながら、returnするのを忘れており、そのままpromise.failure(APIError.invalidOperation)
を返していました。