2016-03-25 5 views
1

Wir haben folgenden Anruf an fetch.Handle eine 500-Antwort mit dem Abruf api

Dies funktioniert, wenn wir eine Antwort von 200 erhalten, aber nichts auf der Konsole protokolliert, wenn wir eine Antwort von 500 erhalten. Wie gehen wir mit 500 um?

+1

i überhaupt mit dem Rahmen bin nicht vertraut oder der api holen, aber ich fand dies: https: //gist.github .com/bryanschmied/14caed2015b9c54e70c3; fetch(). then(). catch (unk => conole.log (unk)); – AndreaBogazzi

+0

Schöne Forschung. Das wird auch hier gezeigt: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch Danke. –

Antwort

3

Arbeitslösung

Kombination then mit catch funktioniert.

fetch('http://some-site.com/api/some.json') 
    .then(function(response) {      // first then() 
     if(response.ok) 
     { 
     return response.text();   
     } 

     throw new Error('Something went wrong.'); 
    }) 
    .then(function(text) {       // second then() 
    console.log('Request successful', text); 
    }) 
    .catch(function(error) {      // catch 
    log('Request failed', error) 
    }); 

Einzelheiten

fetch() gibt ein Promise ein Response Objekt enthält. Die Promise kann entweder erfüllt oder abgelehnt werden. Fulfillment läuft das erste then(), gibt sein Versprechen zurück und lässt das zweite then() laufen. Ablehnung wirft auf die erste then() und springt auf die catch().

Referenzen

MDN - Promise

MDN - Checking that the fetch was successful

Google - Introduction to Fetch

+0

Dies wird wahrscheinlich nicht tun, was Sie wollen. Dies führt entweder zu einem falsch positiven Ergebnis (wenn der Server eine Textfehlerantwort auf einen 4xx-5xx-Status zurückgibt) oder das Extrahieren von Text schlägt fehl und protokolliert den Fehler des Aufrufs von "response.text()", was am meisten der Fall ist wahrscheinlich nicht hilfreich. Sie sollten stattdessen den Statuscode oder 'res.ok' explizit im ersten' then' überprüfen und entsprechend reagieren. Siehe [hier] (https://www.tjvantoll.com/2015/09/13/fetch-and-errors/). – neverfox

+0

@neverfox Vielen Dank dafür. Aktualisiert. –