ios - 通过循环 SWIFT 将删除数据延迟到 Firestore 数组字段值中
问题描述
我正在尝试通过这样的 for 循环删除所有购物车项目:
func removeRelatedProductFromUserCart(selectArrayNodeIds: [String], completion: @escaping(Error?)->()) {
let semaphore = DispatchSemaphore(value: 0)
let serialQueue = DispatchQueue(label: "com.queue.Serial")
serialQueue.async {
for nodeId in selectArrayNodeIds {
FirebaseManager.shared.removeProductFromUsersWishOrCartList(isForWishList: false, item: nodeId) { (error) in
completion(error)
semaphore.signal()
}
semaphore.wait()
}
}
}
和 Firebasemanager:
func removeProductFromUsersWishOrCartList(isForWishList: Bool, item: String?, completion: @escaping (Error?) -> ()) {
let uid = UserDefaults.standard.string(forKey: "uid")!
if isForWishList == true {
Firestore.firestore().collection("user").document(uid).updateData([
"wishList": FieldValue.arrayRemove([item!])
]) { (error) in
completion(error)
}
} else {
Firestore.firestore().collection("user").document(uid).updateData([
"cart": FieldValue.arrayRemove([item!])
]) { (error) in
completion(error)
}
}
}
然后,当我尝试从同一字段中获取购物车项目时,我会在延迟后获得更新的购物车项目列表。我观察到删除过程打开了firebase控制台,我发现删除在控制台中发生了延迟。但是错误响应(error == nill)
不会等到removeRelatedProductFromUserCart
. 那么我怎样才能等到删除 Firestore 上的所有购物车项目然后加载它们呢?提前非常感谢。
解决方案
1- Firebase 在后台线程中运行,因此不需要
let serialQueue = DispatchQueue(label: "com.queue.Serial")
2-你需要一个DispatchGroup
func removeRelatedProductFromUserCart(selectArrayNodeIds: [String], completion: @escaping(Bool)->()) {
let g = DispatchGroup()
for nodeId in selectArrayNodeIds {
g.enter()
FirebaseManager.shared.removeProductFromUsersWishOrCartList(isForWishList: false, item: nodeId) { (error) in
q.leave()
}
}
g.notify(queue:.main) {
completion(true)
}
}
推荐阅读
- angular - 在 Angular 上将样式作为模块导入
- javascript - 如果日期更多是页面加载时定义的日期,如何添加类
- android - 无法在最新的 android studio 中解决依赖问题。为什么以及最新的android studio中的问题是什么
- api - 在 softlayer 上配置网络网关时无法过滤具有服务器的数据中心
- mysql - MySQL触发器在插入另一个表后更新一个表中的字段
- python - 创建一个包含不同行的项目的列表
- delphi - FireDAC ResultConnectionDef 和有关服务器和端口的信息
- c# - 如何为在公式中包含文本框的公式计算的复选框分配值
- wpf - wpf datagrid DataGridTemplateColumn.CellTemplate TextBox HorizontalAlignment
- excel - Power Pivot 数据源 URL 存储在 Excel 文件的内部 XML 中的什么位置?