我在我的函数中使用了async await,但是在使用时出现了错误。
我的代码如下:
class DatabaseManager {
func storeValOnDB(value: String) async -> Bool {
do {
let finish = try await self.database.child("Values").setValue(value)
print(finish)
return true
} catch {
print(error.localizedDescription)
return false
}
}
}
我在我的视图模型函数中使用了这个:
func storeValue() {
var foo = ""
Task {
let result = await DatabaseManager.shared.storeValOnDB(value: self.value)
switch result {
case true:
foo = value // Mutation of captured var 'convos' in concurrently-executing code
case false:
print("failed to store value")
}
}
}
当我在任务中给一些值进行分配,但却出现错误。
Task
内的代码是异步执行的,你试图从该异步块外部捕获局部变量foo
。这是不允许的。foo = value
赋值何时发生是不确定的,这取决于数据库操作完成所需的时间。如果允许赋值,那么在应用的不同执行中,由于异步工作完成的时间不同,可能会得到不同的结果。也许[编辑]一下你的问题,以解释你想要做什么。可能你只需要把代码移到Task
中。 - Paulw11