2015-10-16 15 views
9

Nowe js sprowadzić API nie obietnicę, jeżeli żądanie nie powiedzie się (400):Czy naprawdę nie można uzyskać treści odpowiedzi z nieudanego żądania pobierania js?

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

Czy naprawdę nie ma sposobu, aby uzyskać odpowiedź organizmu, kiedy to nastąpi? na przykład aby sprawdzić kod błędu.

EDIT: I utworzeniu skrzypiec JS: https://jsfiddle.net/4x4xLwqo/ który wywołuje tę mockbin punkt końcowy: http://mockbin.org/bin/d87acbb0-526e-4d66-aea4-b827d9c35031/view

EDIT 2: zaktualizowane jsfiddle używać lepszy punkt końcowy: https://jsfiddle.net/4x4xLwqo/2/

Odpowiedz

9

fetch nie pójdzie do catch jeżeli napotyka błąd HTTP. Możesz sobie z tym poradzić za pomocą zwykłego then.

Od MDN:

fetch() obietnica odrzuci z TypeError gdy błąd sieci napotkania, choć zazwyczaj oznacza problemy zezwolenia lub podobny - 404 nie stanowi błędu w sieci, na przykład. Dokładna kontrola pomyślnego fetch() obejmowałaby sprawdzenie, czy obietnica została rozwiązana, a następnie sprawdzenie, czy właściwość Response.ok ma wartość true.

i towarzyszący przykład z MDN także:

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

pan spróbować? Kończę w bloku catch z 400 – grahamrhay

+0

zobacz jsfiddle powyżej – grahamrhay

+1

@grahamrhay Żądasz niezabezpieczonej zawartości ('" http: // mockbin "') z bezpiecznej strony ('' https: // jsfiddle "') . Nie możesz tego zrobić. Pobieranie kończy się błędem, zanim poprosimy serwer. Podobnie, nie widzę nagłówków kontroli dostępu w odpowiedziach mockbin. Jeśli znowu nie ma dostępu, to nie jest błąd serwera, to błąd połączenia. Jeśli masz dwie domeny TLS (lub dwie 100% niepewności) (podrzędne), a każda właściwie obsługuje nagłówki kontroli dostępu (lub był tylko jednokierunkowy transfer danych, a serwer danych miał nagłówki dostępu), to powinno działać dobrze. – Norguard