gpt4 book ai didi

ios - RxSwift 回调先返回结果

转载 作者:行者123 更新时间:2023-11-28 06:25:01 25 4
gpt4 key购买 nike

我正在使用 Firebase FirAuth API,在 API 返回结果之前,Disposables.create() 已经返回,并且它不再可点击(我知道这可能是因为调用 API 后没有 observer.onCompleted。有没有办法等待/听听结果?

public func login(_ email: String, _ password: String) -> Observable<APIResponseResult> {

let observable = Observable<APIResponseResult>.create { observer -> Disposable in

let completion : (FIRUser?, Error?) -> Void = { (user, error) in

if let error = error {
UserSession.default.clearSession()
observer.onError(APIResponseResult.Failure(error))
observer.on(.completed)
return
}

UserSession.default.user.value = user!
observer.onNext(APIResponseResult.Success)
observer.on(.completed)
return
}

DispatchQueue.main.async {
FIRAuth.auth()?.signIn(withEmail: email, password: password, completion: completion)
}

return Disposables.create()
}

return observable

}

最佳答案

您对 onError/onCompletion 事件终止 Observable 序列的假设是正确的。意思是,在任何情况下,序列都不会再发出任何事件。

作为旁注,您不需要在 .onError() 之后执行 .on(.completed) ,因为 onError 已经终止了序列。

您编写 return Disposables.create() 的部分返回一个 Disposable 对象,以便稍后可以将 observable 添加到 DisposeBag 中,该 DisposeBag 将在解除分配 DisposeBag 时处理解除分配 observable,因此它应该立即返回,但不会终止您的请求。

为了更好地理解正在发生的事情,我建议在使用您的 Observable 的部分周围添加 .debug() 语句,这将使您能够准确了解正在发生的事件并帮助您准确理解怎么了:)

关于ios - RxSwift 回调先返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42186652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com