我最近不时注意到,我的服务有时不时出现故障(并重新启动)。 今天,我在开发环境中实现了它,显然mysql execute调用中的异常不是被try catch捕获的,而是冒泡并“杀死节点”。
代码段
import mysql = require('mysql2/promise');
private async applyChangesToDB(compareResult:CompareResults<Product>, seller: ISellerInfo) {
for(let addedProduct of compareResult.added)
{
try {
_.info('new product found', {product: addedProduct});
await this.dbPool.query(`INSERT INTO
TABLE (f1, f2, f3, f4, f5, f6)
VALUES (?,?,?,?,?,?)`,
[A ,B, C, D, E, F]);
}
catch(err) {
_.error('failed to insert item to database', err, addedProduct);
}
}
}
似乎有时A..F恰好是undefined
,而mysql2不喜欢这样。
错误被打印到控制台:
\ node_modules \ mysql2 \ lib \ pool.js:177 抛出e; ^TypeError:绑定参数不能包含未定义。要传递SQL NULL,请指定JS null 在\ node_modules \ mysql2 \ lib \ connection.js:592:17 在Array.forEach() 在PoolConnection.execute(\ node_modules \ mysql2 \ lib \ connection.js:584:22) 在\ node_modules \ mysql2 \ lib \ pool.js:172:14 在\ node_modules \ mysql2 \ lib \ pool.js:45:37 在processTicksAndRejections(内部/进程/task_queues.js:79:11) 按任意键继续 。 。
我不介意具体的错误,我已将其修复。
我的问题是无法使用catch
块优雅地处理异常...
而不是意外退出。
知道为什么吗?