我一直試圖達到這一段時間,無法讓它工作。如何在Swift中完成外部異步請求之前完成內部異步請求?
首先讓我展示一個簡單的示例代碼:
override func viewDidLoad()
{
super.viewDidLoad()
methodOne("some url bring")
}
func methodOne(urlString1: String)
{
let targetURL = NSURL(string: urlString1)
let task = NSURLSession.sharedSession().dataTaskWithURL(targetURL!) {(data, response, error) in
// DO STUFF
j = some value
print("Inside Async1")
for k in j...someArray.count - 1
{
print("k = \(k)")
print("Calling Async2")
self.methodTwo("some url string")
}
}
task.resume()
}
func methodTwo(urlString2: String)
{
let targetURL = NSURL(string: urlString2)
let task = NSURLSession.sharedSession().dataTaskWithURL(targetURL!) {(data, response, error) in
// DO STUFF
print("inside Async2")
}
task.resume()
}
什麼我基本上做的是我我methodOne
內執行異步請求,並在該函數內,我打電話給我的methodTwo
執行另一異步請求。
我遇到的問題是當調用methodTwo
時,它永遠不會進入異步會話。但是,它在methodTwo
內輸入異步會話,但僅輸入一次k = someArray.count - 1
。它基本上排隊到最後,這不是我想要實現的。
下面是一個示例輸出:
Inside Async1
k = 0
Calling Async2
Inside Async1
k = 0
Calling Async2
k = 1
Calling Async2
Inside Async1
k = 0
Calling Async2
k = 1
Calling Async2
k = 2
Calling Async2
Inside Async1
.....
Inside Async1
k = 0
Calling Async2
k = 1
Calling Async2
k = 2
Calling Async2
k = 3
Calling Async2
k = 4
Inside Async2
換句話說,我想有從methodTwo
異步請求從methodOne
完成異步請求之前每次迭代完成。
這裏是我的目標是什麼樣的輸出:
Inside Async1
k = 0
Calling Async2
Inside Async2
Inside Async1
k = 1
Calling Async2
Inside Async2
Inside Async1
...
我發現這裏類似的東西:Wait until first async function is completed then execute the second async function
但是,我不能讓這個與建議和解決方案的工作。
有人能指出我正確的方向嗎?
謝謝
http://stackoverflow.com/a/28169498 – Shubhank
如果您在MethodOne和MethodTwo之間有執行依賴關係的順序,爲什麼您使用兩個單獨的異步操作? – TJA
看看這個非常相似的問題和我最近給出的答案:http://stackoverflow.com/a/37155037/465677 – CouchDeveloper