2015-10-16 14 views
9

Các js mới lấy API không lời hứa nếu yêu cầu không (400):Có thực sự không có cách nào để lấy nội dung phản hồi từ yêu cầu tìm nạp js không thành công không?

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

Có thực sự không có cách nào để có được cơ thể phản ứng khi điều này xảy ra? ví dụ. để kiểm tra mã lỗi.

EDIT: Tôi đã tạo một fiddle js: https://jsfiddle.net/4x4xLwqo/ mà các cuộc gọi endpoint mockbin này: http://mockbin.org/bin/d87acbb0-526e-4d66-aea4-b827d9c35031/view

EDIT 2: jsfiddle cập nhật để sử dụng một thiết bị đầu cuối tốt hơn: https://jsfiddle.net/4x4xLwqo/2/

Trả lời

9

fetch sẽ không đi vào catch nếu nó gặp lỗi HTTP. Bạn có thể xử lý điều đó với thông thường then.

Từ MDN:

Một lời hứa fetch() sẽ từ chối với một TypeError khi lỗi mạng đang gặp phải, mặc dù điều này thường có nghĩa là vấn đề cho phép hoặc tương tự - 404 không phải là một lỗi mạng, ví dụ. Một kiểm tra chính xác cho một thành công fetch() sẽ bao gồm kiểm tra xem lời hứa đã được giải quyết chưa, sau đó kiểm tra xem thuộc tính Response.ok có giá trị đúng hay không.

Và một ví dụ đi kèm, từ MDN cũng như: bạn

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

đã thử nó? Tôi kết thúc trong khối catch từ 400 – grahamrhay

+0

xem jsfiddle ở trên – grahamrhay

+1

@grahamrhay Bạn đang yêu cầu nội dung không an toàn ('" http: // mockbin "') từ trang an toàn ('" https: // jsfiddle "') . Bạn không thể làm điều đó. Tìm nạp bị lỗi trước khi yêu cầu máy chủ. Tương tự, tôi không thấy các tiêu đề kiểm soát truy cập trong các phản hồi mockbin. Nếu không có quyền truy cập, một lần nữa, đó không phải là lỗi máy chủ, đó là lỗi kết nối. Nếu bạn có hai tên miền TLS (hoặc hai 100% không an toàn) (phụ) và mỗi tên miền được phân phối đúng tiêu đề kiểm soát truy cập (hoặc chỉ có truyền dữ liệu một chiều và máy chủ dữ liệu có các tiêu đề truy cập), điều này sẽ hoạt động tốt. – Norguard

Các vấn đề liên quan