gpt4 book ai didi

firebase - 合并:使用 Future 包装异步调用,但 Future.sink 似乎没有完成

转载 作者:行者123 更新时间:2023-12-04 03:56:57 24 4
gpt4 key购买 nike

初次发帖,长期阅读……我已经封装了对 Firebase Authorization API 的异步调用。我是从 SwiftUI View 函数内部调用它的。

func authenticateFirebaseEmail(email: String, password: String) -> 
Future<String, Error> {
return Future<String,Error> { promise in
Auth.auth().signIn(withEmail: email, password: password) { result, error in
if let error=error {
print("failure detected")
promise(.failure(error))
}

if let result=result {
print("result detected - returning success promise")
promise(.success(result.user.email!))
}

}
}
}
...

func logMeInFuncInView() {
var cancellable : AnyCancellable?
cancellable = authenticateFirebaseEmail(email: self.userEmail, password: self.password).map( {
value in return value
})
.sink(receiveCompletion: { (completion) in
print("completion received")
}, receiveValue: { user in
print("value received")
self.errorMessage = user
})
}

控制台输出如下,但从未到达“接收到的完成”或“接收到的值”调用:
检测到结果 - 返回成功的 promise

问题是包装回调、future、我使用 future 的方式,还是我没有完全看到的东西?

最佳答案

您的cancellable 是局部变量,一旦脱离上下文就会被销毁。一旦订阅者被销毁,它就会取消订阅,因为只有一个,发布者也会取消订阅。

您的解决方案是将您的可取消作为属性(property),即

var cancellable : AnyCancellable?  // << here !!

func logMeInFuncInView() {
cancellable = authenticateFirebaseEmail(email: self.userEmail, password: self.password).map( {
value in return value
})
// .. other code
}

关于firebase - 合并:使用 Future 包装异步调用,但 Future.sink 似乎没有完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63706844/

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