有關的try-catch中的setTimeout處理錯誤
功能簡單的問題try {
setTimeout(function() {
throw new Error('error!');
}, 300)
} catch (e) {
console.log('eeee!')
console.log(e)
}
爲什麼不工作抓塊?
我能讀什麼呢?
P.S:有關處理這種錯誤的可能性的問題。不回答有關承諾
有關的try-catch中的setTimeout處理錯誤
功能簡單的問題try {
setTimeout(function() {
throw new Error('error!');
}, 300)
} catch (e) {
console.log('eeee!')
console.log(e)
}
爲什麼不工作抓塊?
我能讀什麼呢?
P.S:有關處理這種錯誤的可能性的問題。不回答有關承諾
因爲catch塊在詞彙上圍繞着setTimeout
調用,但這不是拋出的函數。 直接翻譯,是計劃與setTimeout
運行在主循環執行,代碼的身體源於他們之外
setTimeout(function() {
try {
throw new Error('error!');
} catch (e) {
console.log('eeee!');
console.log(e);
}
}, 300);
功能。
處理錯誤,把try-catch
的setTimeout
處理程序中:
setTimeout(function() {
try {
throw new Error('error!');
} catch (e) {
console.error(e);
}
}, 300)
如果您需要訪問從塊稱爲setTimeout
的Error
對象,使用Promises:
const promise = new Promise((resolve, reject) => {
setTimeout(function() {
try {
throw new Error('error!');
} catch (e) {
reject(e)
}
}, 300)
})
promise
.then(result => console.log("Ok " + result))
.catch(error => console.error("Ouch " + error))
這上面的例子並不是用Promise
來處理案件的最優雅方式。相反,實施delay(ms)
功能是這樣的:
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}
然後調用
delay(300).then(myFunction).catch(handleError)
你可以找到很好的解釋這個Node.js加載官方doc。
問題是,當您的setTimeout()
函數的回調執行時,try { } catch(err) { }
塊已退出。還要注意回調會導致Node.js進程崩潰。
但是,如果你要處理的setTimeout()
功能的回調中的錯誤,那麼你可以通過使用process
全球EventEmitter對象
process.on('uncaughtException', function(err){
console.log(err)
})
聽他們這應該是公認的答案(提示,提示@Andrew科奇涅夫)因爲它實際解釋了爲什麼和最徹底。 – Jeach