Запрос Axios: ошибка обещания UnhandledPromiseRejectionWarning после перехвата в любом случае - PullRequest
0 голосов
/ 19 октября 2018



Я пытаюсь правильно обрабатывать ошибки в своем коде, но получаю предупреждение, например, что я не обрабатываю отклоненное обещание, см. Ниже:

UnhandledPromiseRejectionWarning: Error: Request failed with status code 401
at createError (/Users/a/Documents/export/node_modules/axios/lib/core/createError.js:16:15)
at settle (/Users/a/Documents/export/node_modules/axios/lib/core/settle.js:18:12)
at IncomingMessage.handleStreamEnd (/Users/a/Documents/export/node_modules/axios/lib/adapters/http.js:201:11)
at IncomingMessage.emit (events.js:187:15)
at endReadableNT (_stream_readable.js:1092:12)
at process._tickCallback (internal/process/next_tick.js:63:19)

Вот мой код:

const axios = require('axios');
axios.get('API_REQUEST', {
    'auth': {
        'bearer': 'NOT_WORKING_TOKEN' // To force the API to return an error ;)
    }
}).catch((error)=>{
    throw error;
})

На данный момент я просто хочу, чтобы моя программа аварийно завершала работу без предупреждения при возникновении ошибки.

1 Ответ

0 голосов
/ 19 октября 2018

Блок catch обычно используется для восстановления после ошибки.Любая ошибка, брошенная и не пойманная в цепочке обещаний (внутри then, catch и т. Д.), Приведет к UnhandledPromiseRejection.

Если вы уверены, что этот запрос не выполнен, он не вводит неопределенныхукажите в своем приложении, что вы можете просто записать ошибку и не выдавать ее.

.catch(err => logger.error(err)) // or console.error()

Если вы настаиваете на сбое при необработанном отклонении, вы можете прослушать это даже глобально, поместив следующий код где-то рядом сточка входа вашего приложения (например, index.js )

process.on('unhandledRejection', reason => {
    throw reason;
});

Также обратите внимание, что в будущих версиях Node по умолчанию предполагается сбой при необработанном отклонении обещания.

...