javascript - Javascript 语法错误被吞并隐藏在 async/await 函数中
问题描述
我正在学习 electron.js,我想在我的代码中使用 aync/await 功能,但我有点担心,因为语法错误被吞没并且沉默,这使我未来的项目成为调试的噩梦。
数据库模块:
exports.connect = function(){
return new Promise( (resolve, reject) => {
connection = mysql.createConnection({
host : host,
port : port,
user : user,
password : null, // or the original password : 'apaswword'
database : database
});
query = util.promisify(connection.query).bind(connection);
connection.connect(function(error) {
// in case of error
if(error){
reject(error);
}
resolve(true);
});
connection.on('error', error => {
dispatcher.send('connection-error', error.code);
});
});
}
引导模块:
async function connectDB(){
try{
let connected = await db.connect(THIS_SHOULD_THROW_ERROR);
return connected;
}catch( error ){
dispatcher.send('connection-error', error);
}
}
exports.init = async function( win ){
dispatcher.init(win);
try{
const connected = await connectDB();
/*if(!connected){
dispatcher.send('fatal-error', "MYSQL NOT CONNECTED");
}*/
}catch( error ){
dispatcher.send('fatal-error', error);
}
}
此代码正在尝试连接到 mysql 并在无法连接时发送错误,但请注意应该停止执行或抛出错误的语法错误“THIS_SHOULD_THROW_ERROR”,但它没有,我的代码即使它也没有任何错误无法连接到mysql。
请注意,如果我删除语法错误,我的代码运行良好并捕获 mysql 连接错误。
我到处都读过 javascript async/promises 代码的正常行为,但我想知道是否有解决方案来捕获语法错误以使我的调试更容易。谢谢
解决方案
如果您在块内有语法错误,try/catch
或者您正在使用一种catch all
机制(即process.on('uncaughtException'...
),语法错误将被吞没:
/* content of test.js */
console.log('hello')
THIS_SHOULD_THROW_ERROR // comment this line and run again
try {
THIS_SHOULD_THROW_ERROR_BUT_DOESNOT
} catch (err) {
// using err will throw exception: console.log(err)
console.log('error happened')
}
现在在指定的行中运行带有和不带注释的脚本:
$节点测试.js
所以你在你的代码中的某个地方这样做。
PS:
async function connectDB(){
try{
let connected = await db.connect(THIS_SHOULD_THROW_ERROR);
return connected;
}catch( error ){
dispatcher.send('connection-error', error);
// throw error
}
}
当您没有错误时,db.connect(THIS_SHOULD_THROW_ERROR)
它处于阻塞状态。如果在某些时候没有抛出错误,则错误被吞没。try
throw
dispatcher.send
推荐阅读
- r - 仅使用 R 中的 rvest 抓取最新的博客文章
- python - tensorflow keras fit,输入验证数据(数据,(target1,target2)),得到错误:'预期没有数据,但得到:'
- php - 未找到安装了扩展 php_com_dotnet 的致命错误类 COM
- python - python:如果列条件满足该列中的更改值
- html - 顶行中的元素隐藏在底行下的CSS问题
- java - Java json 将值附加到 json 数组
- typescript - 是否有一种类型安全的方式来表示函数在传递 T 时返回 T 类型的对象,但返回 Partial 类型的对象
什么时候通过的? - intellij-idea - IntelliJ IDEA 2018.3 浏览存储库
- c++ - 如何在头文件和源文件中组织模板函数和函数
- spfx - spfx - onpropertychange 事件