I am using the AWS Amplify library https://github.com/aws-amplify/amplify-swift to communicate with the Cognito service. Most of the functions have been rewritten using the new async/await approach.
Looking at the following method:
func fetchAuthSession() async throws -> AuthSession {
return try await Amplify.Auth.fetchAuthSession()
}
How can I wrap the await call to return an Observable<AuthSession> using RxSwift?
Use Observable.create to create an Observable.
Use Task { ... } to perform async work.
Use Task { ... } inside Observable.create to perform async work in an Observable.
Something like this should work:
let authSessionObservable: Observable<AuthSession> = Observable.create { observer in
let task = Task {
do {
let session = try await Amplify.Auth.fetchAuthSession()
observer.on(.next(session))
observer.on(.completed)
} catch {
observer.on(.error(error))
}
}
return Disposables.create {
task.cancel()
}
}