我在使用以下模式时遇到麻烦。我需要同步等待初始的异步请求,其中完成块依次调用一系列异步调用,其中每个异步调用都需要等待上一个异步调用结束才能开始。
下面的代码将立即调用所有嵌套的请求,这不是我想要的。
let semaphore = DispatchSemaphore.init(value: 0)
self.getThings { (things) -> (Void) in
for thing in things {
self.getSomething { (somevalue) -> (Void) in
}
}
semaphore.signal()
}
semaphore.wait()
因此,我尝试过的是在for循环内添加另一个信号量,但这具有以下作用:永远不会执行嵌套请求-它无限期地等待信号2永远不会发生。我该如何解决?
let semaphore = DispatchSemaphore.init(value: 0)
self.getThings { (things) -> (Void) in
for thing in things {
let semaphore2 = DispatchSemaphore.init(value: 0)
self.getSomething { (somevalue) -> (Void) in
semaphore2.signal()
}
semaphore2.wait()
}
semaphore.signal()
}
semaphore.wait()