Sto tentando di gestire in modo intelligente le risposte di errore/successo dalla nostra API utilizzando le promesse ES2 di fetch &.Il modo più semplice per gestire gli errori personalizzati con il recupero e la promessa ES6
Ecco come ho bisogno di gestire gli stati di risposta:
204: has no json response, but need to treat as success
406: should redirect to sign in
422: has json for error message
< 400 (but not 204): success, will have json
>= 400 (but not 422): error, will not have json
Quindi, sto lottando con il modo di scrivere questo modo pulito.
ho un po meno di codice stellare lavorando proprio ora che assomiglia a questo:
fetch()
.then(response => checkStatus(response))
.then(parseJSON) //will throw for the 204
.then(data => notify('success', someMsg))
.catch(error => checkErrorStatus(error))
.then(parseJSON)
.then(data => notify('error', dataForMsg)
.catch(error => notify('error', someGenericErrorMsg)
ma sembra piuttosto strano di utilizzare pescato due volte e non so come trattare con quel 204 appena ancora.
Inoltre, proprio per chiarire checkStatus
e checkErrorStatus
fare una cosa simile:
export function checkStatus(response) {
if (response.status >= 200 && response.status < 300) {
return response
} else {
let error = new Error(response.statusText)
error.response = response
throw error
}
}
function checkErrorStatus(error) {
if(error.response.status === 422) {
return error.response
} else {
let error = new Error(response.statusText)
error.response = response
throw error
}
}
Eventuali suggerimenti per pulire questo in su?
Che cos'è 'parseJSON'? – Bergi
oh qualcosa di semplice come questo: funzione di esportazione parseJSON (risposta) { return response.json() } – jasongonzales
Per il caso '422' vedere [questa domanda] (http://stackoverflow.com/q/29473426/1048572) – Bergi