我有一个异步调用,用于在新的wkwebview
中刷新我的cookie。
public override func viewDidLoad() {
super.viewDidLoad()
let cookies = cookieService.getcookies(forDomain: urlService.getTopLevelDomain())
authenticationService.authenticateIfNeeded { [weak self] error in
if let error = error {
print(failed)
} else {
self?.identityService.storeCookies(cookies) {
DispatchQueue.main.async {
self?.loadRequest()
}
}
}
}
public func authenticateIfNeeded(completion: @escaping (Error?) -> Void) {
let domain = urlService.getTopLevelDomain()
identityService.refreshCookies(for: domain,force: true,completion: completion)
}
我已将网络设置为100%丢包预设。
在身份服务中具有setcookies
的逻辑具有重试选项,完成此重试调用总共需要60秒。
func storeCookies(_ cookies: [AnyObject],completion: (() -> Void)? = nil) {
let group = DispatchGroup()
let httpCookies = cookies.compactMap { $0 as? HTTPCookie }
for httpCookie in httpCookies {
self.cookieStorageService.setCookie(httpCookie)
group.enter()
wkCookieStorage.setCookie(httpCookie) {
group.leave()
}
}
group.notify(queue: .main) {
completion?()
}
}
func refreshCookies(for domain: String,force: Bool,completion: @escaping VoidResultHandler) {
Retry<Void>.call(
shouldRetry: self.shouldRetryIdentityOperation,handler: completion,method: { completion in
self.identityOperations.refreshCookies(force: force,domain: domain,handler: { result in
switch result {
case .value(let cookies):
self.storeCookies(cookies) {
completion(.value(()))
}
case .error(let error):
completion(.error(error))
}
})
})
}
直到出现空白屏幕,然后出现重试选项。如何减少这种延迟以拥有更好的用户体验。