普通のタスクを代替するやり方。 fulfillをonNext+onCompleted rejectをonError にして.successをflatMap(チェーンの最後ならsubscribe)にすれば良い
func stringTask(_ isSuccess: Bool) -> Observable<String> {
return Observable<String>.create({ (observer) -> Disposable in
print("start task", Date())
DispatchQueue.global().asyncAfter(deadline: .now() + 1.0) {
guard isSuccess else {
observer.onError(Err.some)
return
}
observer.onNext("val")
observer.onCompleted()
}
return Disposables.create()
})
}
let initialTask = Observable<Void>.just(())
initialTask.flatMap { (_) -> Observable<String> in
let successTask = stringTask(true)
return successTask
}.subscribe(onNext: { (val) in
print("finish \(val)", Date())
}, onError: { (err) in
print("err=\(err)")
})