我目前使用Moya來組織我的網絡呼叫。按照他們的docs,我已經配置如下所示:如何使用Moya取消多個聯網請求
enum SomeAPIService {
case endPoint1(with: Object)
case endPoint2(duration: Int)
}
當調用一個端點(在這種情況下,endPoint1
),我做到以下幾點:
let provider = MoyaProvider<SomeAPIService>()
provider.request(.endPoint1(object: object)) { (result) in
switch result {
case let .success(moyaResponse):
finished(Result.success(value: moyaResponse.value))
case let .failure(error):
let backendError = BackendError(localizedTitle: "", localizedDescription: "Some error", code: moyaResponse.statusCode)
finished(Result.failure(error: backendError))
}
})
我的目標是,在用戶執行一個動作,取消所有發生的網絡請求。
因此,Moya確實允許取消討論here的請求。從最upvoted評論,有人提到let request_1 = MoyaRequestXXXXX
然後ruest_1.cancel()
我的問題是:
- 我將如何繼續指向請求?
provider
沒有cancel()
函數 - 所以我該如何調用它?
任何幫助,非常感謝。
編輯:
%的有益的建議有關使用[Cancellable]
,我做了以下內容:
(1)在我的應用程序的所謂Operator
單一實例,我添加var requests = [Cancellable]()
(2)每個API調用被添加到requests
陣列作爲撤銷的,就像這樣:
let provider = MoyaProvider<SomeAPIService>()
Operator.shared.requests.append(provider as! Cancellable) //causing error
provider.request(.endPoint1(object: object)) { (result) in
//rest of the block omitted
我覺得我沒有得到語法正確,並且添加提供者而不是請求。但是,由於請求本身就是一個塊,那麼將在哪裏添加請求?
非常感謝您的建議。我在問題主體中添加了更多內容作爲響應 - 它與添加請求的語法有關。主要問題是塊語法 - 請求是塊,我不知道在我的'[Cancellable]'數組中添加請求的合適位置。 – daspianist
查看編輯答案:) – kamwysoc
啊完美。非常感謝! – daspianist