按顺序附加异步响应 swit 3
Posted
技术标签:
【中文标题】按顺序附加异步响应 swit 3【英文标题】:Append async responses in sequence swit 3 【发布时间】:2017-06-04 21:12:21 【问题描述】:我正在生成一个代码,它使用 dataTask
从 api 检索数据并通过 succsss
返回函数
获取响应的函数需要按顺序附加或连接它们,但是我无法完成。
这是我尝试过的,两者都失败了,因为最后一个打印行在单个股票代码成功调用返回之前执行。
func getTicker()
var tickerText = ""
tickerText += dataRequestnew("https://api-path-here/1") success in return "First-item: \(success)"
tickerText += dataRequestnew("https://api-path-here/2") success in return " | Second-item: \(success)"
print(tickerText)
或者
var tickerText = ""
func getTicker()
dataRequestnew("https://api-path-here/1") success in
self.tickerText += "First-item: \(success)"
print(self.tickerText)
dataRequestnew("https://api-path-here/2") success in
self.tickerText += " | Second-item: \(success)"
print(self.tickerText)
print(self.tickerText)
在第二个例子中,单个代码打印成功,但不是最后一个,它只返回默认值。
问题
如何让代码按顺序运行,或者至少确保在所有tickerText调用成功返回后最后一次打印工作。
谢谢。
【问题讨论】:
【参考方案1】:作为一个选项,您可以在第一个响应中调用第二个请求。然后才打印结果。
var tickerText = ""
func getTicker()
dataRequestnew("https://api-path-here/1") success in
self.tickerText += "First-item: \(success)"
dataRequestnew("https://api-path-here/2") success in
self.tickerText += " | Second-item: \(success)"
print(self.tickerText)
【讨论】:
这让我想到了,但是如果我有很多物品恕我直言不切实际,请问还有其他建议吗? 实际上,在我看来,最好的选择是使用 ReactiveX github.com/ReactiveX/RxSwift。您可以将您的请求转换为数据流并将它们平面映射到最后有一个串联的响应。您可以在此处找到如何实现它的清晰示例:***.com/questions/40919920/…【参考方案2】:创建一个串行队列。调度该队列上的请求。
let serialQueue = DispatchQueue(label: "com.mydomain.purpose")
serialQueue.async
// some code
serialQueue.async
// some code
【讨论】:
以上是关于按顺序附加异步响应 swit 3的主要内容,如果未能解决你的问题,请参考以下文章