Skip to content

Commit a9dd890

Browse files
authored
fix: check for ParseError first after server response (#332)
* fix: check for ParseError first after server response * nits
1 parent 96232f3 commit a9dd890

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

Sources/ParseSwift/Extensions/URLSession.swift

+11-9
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,18 @@ internal extension URLSession {
5454
return .failure(parseError)
5555
}
5656
if let responseData = responseData {
57+
if let error = try? ParseCoding.jsonDecoder().decode(ParseError.self, from: responseData) {
58+
return .failure(error)
59+
}
60+
if URLSession.parse.configuration.urlCache?.cachedResponse(for: request) == nil {
61+
URLSession.parse.configuration.urlCache?
62+
.storeCachedResponse(.init(response: response,
63+
data: responseData),
64+
for: request)
65+
}
5766
do {
58-
if URLSession.parse.configuration.urlCache?.cachedResponse(for: request) == nil {
59-
URLSession.parse.configuration.urlCache?.storeCachedResponse(.init(response: response,
60-
data: responseData),
61-
for: request)
62-
}
6367
return try .success(mapper(responseData))
6468
} catch {
65-
if let error = try? ParseCoding.jsonDecoder().decode(ParseError.self, from: responseData) {
66-
return .failure(error)
67-
}
6869
guard let parseError = error as? ParseError else {
6970
guard JSONSerialization.isValidJSONObject(responseData),
7071
let json = try? JSONSerialization
@@ -255,7 +256,8 @@ internal extension URLSession {
255256
completion: @escaping(Result<U, ParseError>) -> Void
256257
) {
257258
downloadTask(with: request) { (location, urlResponse, responseError) in
258-
completion(self.makeResult(request: request, location: location,
259+
completion(self.makeResult(request: request,
260+
location: location,
259261
urlResponse: urlResponse,
260262
responseError: responseError,
261263
mapper: mapper))

0 commit comments

Comments
 (0)