2017-06-04 76 views
1

我生成經由succsss追加異步序列SWIT反應3

它獲取的響應需要追加或順序將它們連接起來的功能從使用dataTask並返回給函數的API檢索數據的斷續器,但是我無法完成。

這是我試過的,都失敗了,因爲最後一行打印行在單個ticker成功調用返回之前執行。

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) 
      } 
     }  
    } 
+0

這個交叉我的腦海裏,但它不是實踐,如果我有很多項目恕我直言,請任何其他建議? –

+0

其實,在我看來,最好的選擇是使用ReactiveX https://github.com/ReactiveX/RxSwift。 您可以將您的請求轉換爲數據流,並將它們平面映射爲末尾有單個連接的響應。你可以找到一個清晰的例子來說明如何在這裏實現它:https://stackoverflow.com/questions/40919920/proper-usage-of-rxswift-to-chain-requests-flatmap-or-something-else –

0

創建一個串行隊列。分發該隊列上的請求。

let serialQueue = DispatchQueue(label: "com.mydomain.purpose") 
    serialQueue.async { 
     // some code 
    } 
    serialQueue.async { 
     // some code 
    }