我有100 + request.I需要發送一個新的請求,當最後一個完成,所以服務器將不會返回錯誤代碼 - 429. 如何通過afnetworking 3.0?發送下一個請求時,最後一個完成
回答
我不是很熟悉的AFNetworking
特定的API,但你可以設置:
- 包含您的所有未決請求變量數組,
- 調用的方法(例如)
sendNext()
,消除了數組的第一個入口,異步執行請求,並在完成塊內調用自身。
當然,你將需要一個終止條件,而這只是當數組變爲空時停止。
thx.這是解決我的代碼中的問題的方法。我正在通過網絡連接尋找更好的方法。 – lsdoy
如果它具有某種批次/隊列功能,那將會很棒。我沒有使用過這個框架。 –
有兩種方法可以處理您的問題。
首先,創建一個操作隊列並將所有請求添加到隊列中。之後,創建新請求的操作,然後將依賴項添加到隊列中的所有請求。因此,您的新操作(將執行新請求)將在最後一次請求完成後執行。其次,你可以使用dispatch_barrier_async,它會在你的併發隊列中創建一個同步點。這意味着您應該創建一個併發隊列來執行您的100+請求,並且您的自定義隊列中的dispatch_barrier_async塊將執行新的請求。
Thanks Sendoa for the link to the GitHub issue where Mattt explains why this functionality is not working anymore. There is a clear reason why this isn't possible with the new NSURLSession structure; Tasks just aren't operations, so the old way of using dependencies or batches of operations won't work.
I've created this solution using a dispatch_group that makes it possible to batch requests using NSURLSession, here is the (pseudo-)code:
// Create a dispatch group
dispatch_group_t group = dispatch_group_create();
for (int i = 0; i < 10; i++) {
// Enter the group for each request we create
dispatch_group_enter(group);
// Fire the request
[self GET:@"endpoint.json"
parameters:nil
success:^(NSURLSessionDataTask *task, id responseObject) {
// Leave the group as soon as the request succeeded
dispatch_group_leave(group);
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
// Leave the group as soon as the request failed
dispatch_group_leave(group);
}];
}
// Here we wait for all the requests to finish
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// Do whatever you need to do when all requests are finished
});
I want to look write something that makes this easier to do and discuss with Matt if this is something (when implemented nicely) that could be merged into AFNetworking. In my opinion it would be great to do something like this with the library itself. But I have to check when I have some spare time for that.
這個問題可能重複的AFNetworking 3.0 AFHTTPSessionManager using NSOperation。您可以按照@Darji評論爲少數呼叫,對於100+呼叫添加這些實用程序類https://github.com/robertmryan/AFHTTPSessionOperation/。 同時發送100+個請求操作是非常不切實際的方法。如果可能的話,儘量減少它。
- 1. 在請求時完成一個AsyncTask
- 2. req.pause()對完成請求暫停下一個請求
- 3. 直到完成第一個post請求才發送jQuery post請求
- 4. 只有當最後一個Ajax請求在javascript中完成時,纔會進入下一個迭代操作。
- 5. IE9似乎在向最後一個URL發送$ http.post請求
- 6. 從一個請求發送JSON響應到另一個請求
- 7. 在發送下一個請求之前取消ajax請求? (jQuery)
- 8. 當任何Ajax請求完成時觸發一個事件
- 9. 當請求完成時發送通知給另一個視圖控制器
- 10. 在發送多隻XMLHttpRequest的最後一個請求返回成功
- 11. 觸發功能,一旦一個REST請求已完成
- 12. 完成一個PHP後的幾個curl請求
- 13. 補間as3停止下一個補間發生,直到最後一個完成
- 14. 發送一個Ajax請求的Spring MVC
- 15. 發送一個posthost請求到localhost
- 16. Angular發送一個http請求兩次
- 17. 一個asp,net controll發送ajax請求
- 18. 發送一個HTTP請求,使用PHP
- 19. NodeJS發送一個HTTPS SOAP請求
- 20. 窗體發送一個http請求
- 21. 發送一個請求到SOAP WSDL
- 22. 發送一個Ajax請求的PhoneGap
- 23. 發送JSON請求到一個Java Bean
- 24. 發送一個HTTP刪除請求
- 25. 發送一個Cookie在RestAngular請求
- 26. 發送一個HTTP請求W/JavaScript的
- 27. 發送請求到一個頁面
- 28. 發送一個AJAX POST請求
- 29. Typeahead等待發出多個請求而不是最後一個
- 30. 一次發送一個請求到每一個URL Python
操作隊列? – holex
嘗試批處理操作隊列 – iOS