Promise 是 JavaScript 中用于处理异步操作的对象。它代表一个异步操作的最终完成(或失败)及其结果值。一个 Promise 处于以下几种状态之一:
当一个 Promise 被 reject 时,它会抛出一个错误。如果这个错误没有被捕获,它将成为一个未捕获的异常。
.catch()
方法可以集中处理所有异步操作中的错误。setTimeout
和 setInterval
的回调函数会被放入宏任务队列中。fetch
或 axios
进行网络请求。fs
模块进行文件操作。setTimeout
实现延迟执行。问题描述:当使用 Promise 时,如果异步函数中发生了错误,并且没有被捕获,会导致未捕获的异常。
原因:通常是因为没有正确使用 .catch()
方法来捕获 Promise 中的错误,或者错误发生在 .then()
方法中而没有被传递到下一个 .catch()
。
解决方法:
.catch()
方法:asyncFunction()
.then(result => {
console.log(result);
})
.catch(error => {
console.error('Error:', error);
});
async/await
中使用 try/catch
:async function run() {
try {
const result = await asyncFunction();
console.log(result);
} catch (error) {
console.error('Error:', error);
}
}
run();
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
});
function asyncFunction() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('Something went wrong!'));
}, 1000);
});
}
asyncFunction()
.then(result => {
console.log(result);
})
.catch(error => {
console.error('Error:', error);
});
通过以上方法,可以有效地捕获和处理 Promise 中的错误,避免未捕获的异常导致程序崩溃。
领取专属 10元无门槛券
手把手带您无忧上云