gpt4 book ai didi

ios - 使用具有多个异步调用的调度队列

转载 作者:搜寻专家 更新时间:2023-11-01 07:06:47 26 4
gpt4 key购买 nike

我有一个带有完成处理程序的函数,并且在该函数中我进行了 2 个独立的异步调用。

它的伪像:

func Foo(completion: ()->()) {
let dispatchGroup = DispatchGroup()

for doc in documents {
dispatchGroup.enter()
ref.getDocument(completion: { (snapshot, error) in
//Need another getDocument call here
let Object = Object(init with snapshot data)
dispatchGroup.leave()
}
}
} completion()

我需要做的是在我添加评论的地方添加另一个异步调用。

这将使代码看起来像:

ref.getDocument(completion: { (snapshot, error) in
userCountRef.getDocuments(completion: { (snap, error) in
let Object = Object(init with snapshot data)
dispatchGroup.leave()
}
} completion()

第二组代码的问题是我的完成处理程序在我的 for 循环第一次通过后被调用。

基本上我想要做的是能够处理两组具有调度组的异步调用。我需要关闭第一个调用,然后使用第一个调用的信息我需要使用它来进行第二个调用,然后在最后创建一个类对象,循环完全冲洗和重复,然后在非常结束叫我完成。

如何实现?

最佳答案

当第二个异步调用依赖于第一个,但没有来自 ref 中任何其他对象的其他第一个数据调用时,这应该有效:

func Foo(completion: ()->()) {
let dispatchGroup = DispatchGroup()

for doc in documents {
dispatchGroup.enter()
ref.getDocument(completion: { (snapshot, error) in
userCountRef.getDocuments(completion: { (snap, error) in
let Object = Object(init with snapshot data)
dispatchGroup.leave()
}
}
}

// .main here is the main DispatchQueue. Can be any queue desired
dispatchGroup.notify(.main) {
completion()
}
}

通知 将确保在调用您的完成。在苹果文档中查看更多信息 here .

关于ios - 使用具有多个异步调用的调度队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47525585/

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