我正在使用AWS Amplify库https://github.com/aws-amplify/amplify-swift与Cognito服务进行通信.大多数函数都使用新的异步/等待方法进行了重写.

请看以下方法:

func fetchAuthSession() async throws -> AuthSession {
    return try await Amplify.Auth.fetchAuthSession()
}

如何使用RxSWIFT包装等待调用以返回Observable<AuthSession>

推荐答案

使用Observable.create创建Observable.

Task { ... }来执行async项工作.

Observable.create中使用Task { ... }来执行Observable中的async工作.

像这样的事情应该会奏效:

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()
    }
}

Swift相关问答推荐

如何在每天午夜重置布尔值

SWIFT计划计时器方法在时间间隔后未被调用

如何在枚举有关联数据时使用combined if with case

一种函数,用于判断变量的类型是否为在SWIFT中作为参数传递的类型

UICollectionViewCompostionalLayout Collectionview单元格宽度在重新加载数据后未正确调整大小

String.Index encodedOffset已弃用,但建议的替代方案不起作用

从`compactMap()`闭包返回`nil`未通过结果类型判断

expose 不透明的底层类型

Swift-SceneKit-无法从art.scnassets加载.scn文件

如何从另一个 swift 文件中调用函数

Swift 中的Combine和didSet有什么区别?

将 struct 作为泛型类型传递并访问该泛型类型属性

如何在填充上添加 if else 语句? SwiftUI

Swift 2.0 方法不能标记为@objc,因为参数的类型不能在 Objective-C 中表示

swift中的SequenceType和CollectionType有什么区别?

FCM 后台通知在 iOS 中不起作用

如何快速截取 UIView 的屏幕截图?

UICollectionView 自定义单元格在 Swift 中填充宽度

更改日期 Select 器的文本 colored颜色

无法停止 AVPlayer