gpt4 book ai didi

Javascript 语法错误被吞并隐藏在 async/await 函数中

转载 作者:行者123 更新时间:2023-12-03 08:00:49 27 4
gpt4 key购买 nike

我正在学习 electron.js,我想在我的代码中使用 aync/await 功能,但我有点担心,因为语法错误被吞没并且沉默,这使我 future 的项目成为调试的噩梦。

数据库模块:

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 中存在语法错误 block 或您正在使用 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')
}

现在在指定的行中运行带有和不带注释的脚本:

$ node test.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不会在某个错误被吞没的时候抛出错误。

关于Javascript 语法错误被吞并隐藏在 async/await 函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59705289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com