计划运行的函数setTimeout
在主循环中执行,位于生成它们的代码体之外。
要处理错误,请将try-catch
在 - 的里面setTimeout
处理程序:
setTimeout(function () {
try {
throw new Error('error!');
} catch (e) {
console.error(e);
}
}, 300)
如果您需要访问Error
调用块中的对象setTimeout
, use Promises https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise:
const promise = new Promise((resolve, reject) => {
setTimeout(function () {
try {
throw new Error('error!');
resolve(); // if the previous line didn't always throw
} 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)