2015-10-16 15 views
9

I nuovi js recuperano API fallisce la promessa, se la richiesta non riesce (400):Non c'è davvero modo di ottenere il corpo della risposta da una richiesta js fetch fallita?

fetch(uri).catch(function(err) { 
    console.log(err); 
}); 

c'è davvero nessun modo per ottenere il corpo di risposta quando questo accade? per esempio. per controllare un codice di errore.

EDIT: Ho creato un violino js: https://jsfiddle.net/4x4xLwqo/ che chiama questo mockbin endpoint: http://mockbin.org/bin/d87acbb0-526e-4d66-aea4-b827d9c35031/view

EDIT 2: jsfiddle aggiornato per utilizzare un endpoint meglio: https://jsfiddle.net/4x4xLwqo/2/

risposta

9

fetch non andrà in catch se incontra un errore HTTP. Puoi gestirlo con un normale then.

Da MDN:

Un fetch() promessa rifiuterà con un TypeError quando viene rilevato un errore di rete, anche se questo di solito significa problemi di autorizzazione o simili - un 404 non costituisce un errore di rete, per esempio. Un controllo accurato per il successo di fetch() includerebbe il controllo della risoluzione della promessa, quindi il controllo che la proprietà Response.ok ha un valore true.

E un esempio di accompagnamento, da MDN così:

fetch('flowers.jpg').then(function(response) { 
    if(response.ok) { 
    response.blob().then(function(myBlob) { 
     var objectURL = URL.createObjectURL(myBlob); 
     myImage.src = objectURL; 
    }); 
    } else { 
    console.log('Network response was not ok.'); 
    } 
}) 
.catch(function(error) { 
    console.log('There has been a problem with your fetch operation: ' + error.message); 
}); 
+0

ha lo provate? Finisco nel blocco catch da un 400 – grahamrhay

+0

vedi il jsfiddle sopra – grahamrhay

+1

@grahamrhay Stai richiedendo contenuti non sicuri ('" http: // mockbin "') da una pagina sicura ('" https: // jsfiddle "') . Non puoi farlo. Il recupero è in errore prima di chiedere al server. Allo stesso modo, non vedo intestazioni di controllo dell'accesso nelle risposte mockbin. Se non c'è accesso, ancora, non si tratta di un errore del server, si tratta di un errore di connessione. Se disponevi di due domini TLS (o due al 100% insicuri) (sub) e ognuno di essi aveva intestazioni di controllo di accesso opportunamente servite (o c'era solo un trasferimento dati unidirezionale e il server dati aveva le intestazioni di accesso), questo dovrebbe funzionare bene. – Norguard

Problemi correlati