fix ajax error handling

This commit is contained in:
Nolan Lawson 2018-02-24 19:25:33 -08:00
parent 160e763e0d
commit a82cc57f83
2 changed files with 17 additions and 7 deletions

View file

@ -11,12 +11,9 @@ export async function setFavorited (statusId, favorited) {
let instanceName = store.get('currentInstance')
let accessToken = store.get('accessToken')
try {
let result = await (favorited
await (favorited
? favoriteStatus(instanceName, accessToken, statusId)
: unfavoriteStatus(instanceName, accessToken, statusId))
if (result.error) {
throw new Error(result.error)
}
await database.setStatusFavorited(instanceName, statusId, favorited)
let statusModifications = store.get('statusModifications')
let currentStatusModifications = statusModifications[instanceName] =

View file

@ -7,6 +7,17 @@ function fetchWithTimeout (url, options) {
})
}
async function throwErrorIfInvalidResponse(response) {
let json = await response.json()
if (response.status >= 200 && response.status < 300) {
return json
}
if (json && json.error) {
throw new Error(response.status + ': ' + json.error)
}
throw new Error('Request failed: ' + response.status)
}
async function _post (url, body, headers, timeout) {
let fetchFunc = timeout ? fetchWithTimeout : fetch
let opts = {
@ -23,17 +34,19 @@ async function _post (url, body, headers, timeout) {
'Accept': 'application/json'
})
}
return (await fetchFunc(url, opts)).json()
let response = await fetchFunc(url, opts)
return throwErrorIfInvalidResponse(response)
}
async function _get (url, headers, timeout) {
let fetchFunc = timeout ? fetchWithTimeout : fetch
return (await fetchFunc(url, {
let response = await fetchFunc(url, {
method: 'GET',
headers: Object.assign(headers, {
'Accept': 'application/json'
})
})).json()
})
return throwErrorIfInvalidResponse(response)
}
export async function post (url, body, headers = {}) {