Swift4의 RxSwift를 사용하여 비동기 처리가 실패한 경우 재시도 여부를 확인한 후 다시 실행
비동기 처리 있습니다, 비동기 처리.
예를 들면 그것은 외부 통신이거나…
어쨌든!
외부 통신이나 어쨌든 실패하면 재시도 여부를 확인한 후 다시 확인하고 싶습니다! 라고 하는 일이 있다고 생각합니다.
RxSwift의 retryWhen을 사용하면 그런 처리도 깨끗이 깔끔하게 정리되어 버리므로 비망록도 겸해!
구현 예!
retry.swift// 何かしらの非同期処理を行う元ネタを用意
let o: Observable<Any> = Observable.create { observer in
// とりあえずテスト用に毎回必ずエラーが起きるようにする
observer.onError(TestError())
return Disposables.create()
}
// retryWhenでリトライの条件を設定!
o.retryWhen({ (errors: Observable<Error>) in
return errors.flatMap({ error -> Observable<Any> in
let showAlert: Observable<Any> = Observable.create { observer in
let action1 = UIAlertAction(title: "OK", style: .default, handler: { _ in
// OKを押したら再実行!
observer.onNext("🍛")
})
let action2 = UIAlertAction(title: "NG", style: .default, handler: { _ in
// NGを押したらエラー実行でリトライ処理を抜ける!
observer.onError(HogeError())
})
let alertController = UIAlertController(
title: "",
message: "( ˘ω˘)",
preferredStyle: .alert
)
alertController.addAction(action1)
alertController.addAction(action2)
view.present(alertController, animated: true, completion: nil)
return Disposables.create()
}
return showAlert
})
}).subscribe(
onNext: { _ in
print("おめでとう👏")
},
onError: { _ in
print("☠️")
}
)
깨끗이 깨끗이 정리할 수 있다고 말하면서, 이마이치 기술이 중복인 생각도 하지만…
어쨌든 RxSwift에 재시도 처리를 맡기고 쓸 수있었습니다.
Reference
이 문제에 관하여(Swift4의 RxSwift를 사용하여 비동기 처리가 실패한 경우 재시도 여부를 확인한 후 다시 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fumihiko-hidaka/items/c086f97f68711675afb0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// 何かしらの非同期処理を行う元ネタを用意
let o: Observable<Any> = Observable.create { observer in
// とりあえずテスト用に毎回必ずエラーが起きるようにする
observer.onError(TestError())
return Disposables.create()
}
// retryWhenでリトライの条件を設定!
o.retryWhen({ (errors: Observable<Error>) in
return errors.flatMap({ error -> Observable<Any> in
let showAlert: Observable<Any> = Observable.create { observer in
let action1 = UIAlertAction(title: "OK", style: .default, handler: { _ in
// OKを押したら再実行!
observer.onNext("🍛")
})
let action2 = UIAlertAction(title: "NG", style: .default, handler: { _ in
// NGを押したらエラー実行でリトライ処理を抜ける!
observer.onError(HogeError())
})
let alertController = UIAlertController(
title: "",
message: "( ˘ω˘)",
preferredStyle: .alert
)
alertController.addAction(action1)
alertController.addAction(action2)
view.present(alertController, animated: true, completion: nil)
return Disposables.create()
}
return showAlert
})
}).subscribe(
onNext: { _ in
print("おめでとう👏")
},
onError: { _ in
print("☠️")
}
)
Reference
이 문제에 관하여(Swift4의 RxSwift를 사용하여 비동기 처리가 실패한 경우 재시도 여부를 확인한 후 다시 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fumihiko-hidaka/items/c086f97f68711675afb0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)