Catching Не удалось загрузить ресурс при использовании Fetch API

Я пытаюсь отловить кучу ошибок, связанных с одной и той же политикой происхождения, при использовании Fetch API, но безуспешно:

window.onerror = (message, file, line, col, error) => console.log(error)
window.addEventListener('error', (error) => console.log(error))

try {
    fetch('https://www.bitstamp.net/api/ticker/').catch(e => {
        console.log('Caugth error:')
        console.log(e)
        console.log(JSON.stringify(e))
    })
}
catch (e) {
    console.log('try-catch')
    console.log(e)
}

Ошибки, которые я хочу поймать, появляются только в веб-консоли:

сообщения об ошибках

См. пример кода здесь: https://github.com/nyg/fetch-error-test

Как я могу отловить эти ошибки, чтобы отобразить сообщение на экране?

РЕДАКТИРОВАТЬ: блок перехвата выборки фактически выполняется.

fetch('https://www.bitstamp.net/api/ticker/')
    .then(response => response.text())
    .then(pre)
    .catch(e => {
        pre(`Caugth error: ${e.message}`)
    })

function pre(text) {
    var pre = document.createElement('pre')
    document.body.insertAdjacentElement('afterbegin', pre)
    pre.insertAdjacentText('beforeend', text)
}
pre {
    border: 1px solid black;
    margin: 20px;
    padding: 20px;
}


person nyg    schedule 04.08.2017    source источник


Ответы (1)


Насколько я помню, вы не можете catch управлять исключениями, управляемыми браузером, в вашем типичном try->catch или catch chain внутри fetch.

Исключения CORS выбрасываются с намерением, чтобы пользователь, просматривающий сайт, знал о таких аномалиях, если вы можете их так назвать, и для защиты от любой утечки возможной защищенной информации на вызываемом api / server.

Прочтите здесь из предыдущего обсуждения SO о том, сможете ли вы отловить эти ошибки с обработчиком исключений

Если запрос выдает ошибку, которая может быть частью ответа, например, ошибка статуса и т. Д., Вы можете поймать ее и показать собственное сообщение.

person Schrodinger's cat    schedule 04.08.2017
comment
Похоже, ты прав :). Спасибо за ссылку, мне не удалось найти это обсуждение ... Однако, хотя я не могу отловить эти ошибки, блок catch для выборки фактически выполняется (у меня, вероятно, была проблема с моим кодом). Сообщение об ошибке отображается только Type error в Safari, Failed to fetch в Chrome и NetworkError when attempting to fetch resource. в Firefox. Я отредактировал свой ответ с помощью фрагмента кода. - person nyg; 06.08.2017