首先,相同點,都是獲取代碼錯誤信息的方法,而且2種都不能獲取異步錯誤。比如:
try和catch
function f2() {
try {
console.log(a)
} catch (e) {
console.log(e) // a is not defined
}
}
f2()
function f2() {
try {
setTimeout(() => {
console.log(a)
}, 100)
} catch (e) {
console.log(e)
}
}
f2()
報錯:Uncaught ReferenceError: a is not defined
--------------------------------
promise和catch
var c = new Promise((resolve, reject) => {
setTimeout(() => {
console.log(a)
}, 100)
}).catch(error => {
console.log(error) // b is not defined
})
var c = new Promise((resolve, reject) => {
a = b + c
}).catch(error => {
console.log(error)
})
報錯:Uncaught ReferenceError: a is not defined
---------------------------------
不同點:try,catch不能捕獲promise里reject出來的錯誤信息,比如:
function f2() {
try {
Promise.reject('出錯了');
} catch(e) {
console.log(e)
}
}
f2()
報錯:Uncaught (in promise) 出錯了
如果需要在try,catch里獲取promise里的錯誤時,可以這樣使用:
function f2() {
try {
Promise.reject('出錯了').catch(err => {
console.log('2', err)
});
console.log('1')
} catch (e) {
console.log(e)
}
}
f2()
// 1
// 2 出錯了