Node.js中SQLite3插入数据成功却返回undefined问题排查
问题原因
你使用的db.run是回调式API,await无法捕获回调函数内的返回值。save_user实际是db.run方法自身返回的对象,而非你在回调里return的{message:'success'},所以最终返回undefined。
修复方案
把db.run包装成Promise,让await能正确获取回调的结果:
static async insert(firstname,lastname,username,role,phone,password,date) { try { return await new Promise((resolve, reject) => { db.run( `INSERT INTO users VALUES(?,?,?,?,?,?,?,?)`, [this.lastID, firstname, lastname, username, role, phone, password, date], function(err) { if (err) { reject({ error: err.message }); } else { // 可顺便返回插入后的lastID,方便后续业务使用 resolve({ message: 'success', lastID: this.lastID }); } } ); }); } catch (err) { return err; } }
关键说明
- 原生sqlite3的
run方法不返回Promise,必须手动用Promise包裹才能配合await使用。 - 回调要使用普通函数,不能用箭头函数——箭头函数的
this会继承外层上下文,导致无法获取到db.run回调里的lastID。 - 用
reject传递错误信息,resolve传递成功结果,外层通过await就能拿到预期的返回值。
内容的提问来源于stack exchange,提问作者eons
相关产品推荐
相关产品推荐

