关于捕获错误的几种方式
try/catch
使用范围:
-
在同步函数中,可以使用try/catch捕获错误信息。
var b = 0; try { console.log(a); //变量a不存在,发生错误 } catch (err) { //catch()捕获error name=err console.log(b = 1); //执行此代码以矫正错误 if (confirm("对还是错?")) { //弹出对话框,显示信息“对还是错?”和“确定”/“取消”按钮 document.write("对"); //按“确定”,页面输出“对” } else { document.write("错"); //按“取消”,页面输出“错” } }
-
由于async/await并没有自己的错误信息捕获机制,所以try/catch用来捕获async/await函数的错误机制
async function asyfn(){ try{ var result1 = await fn(false, 'hello'); console.log('中间内容输出'); var result2 = await fn(false, 'world'); console.log(result1,result2); }catch(e){ console.log('catch',e) } }
使用catch捕获Promise错误
注意的是:try/catch不能捕获异步函数的错误信息,所以对于Promise来说,try/catch并不能捕获它的错误信息。但是这并没有关系,应为对于Promise来说,它有自己捕获错误信息的方式。使用链式调用方法catch()方法,捕获Promise错误信息。
function asyncFunction(){
return new Promise(function(resolve, reject){
console.log('aaa')
throw new Error('throw new error')
console.log('bbb')
resolve('resolve error')
})
}
asyncFunction().catch(function(error){
console.log('one', error)
}).then(function(message){
console.log('resolve')
}).catch(function(error){
console.log('two', error)
})
指得注意的是:上面所说的try/catch不能捕获异步函数的错误信息对于async/await来说,并不使用。try/catch的错误信息能够被try/catch所捕获到。
使用回调函数捕获错误
就是利用回调函数,判断是否出现问题。这个方法基本不再使用,这里不在讲述。