Axios请求:捕获后仍然承诺错误UnhandledPromiseRejectionWarning

时间:2018-10-19 15:35:51

标签: javascript node.js error-handling axios es6-promise



我正在尝试正确管理代码中的错误,但收到警告,例如我没有处理被拒绝的承诺,如下所示:

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 :(得分:2)

catch块通常用于从错误中恢复。抛出的任何错误且未在诺言链中捕获(在thencatch等内部)都将导致UnhandledPromiseRejection

如果您确定此请求失败不会将任何未定义状态引入您的应用程序,则可以记录该错误而不抛出。

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

如果您坚持让未处理的拒绝崩溃,您可以将以下代码放在应用程序入口点附近(例如 index.js

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

还请注意,默认情况下,Node的未来版本应在未处理的承诺拒绝时崩溃。