Node.js结合mysql包同步执行操作遇到困难的问题咨询
问题根本原因
- 你使用的
mysql包原生query方法为回调风格API,本身不会返回Promise对象,await仅能作用于Promise对象,无法等待回调执行完成 - 代码中
return results写在query的回调函数内部,该返回值仅属于回调函数,不会被外层getManufactuters函数接收。getManufactuters没有显式返回值,默认返回undefined
解决方案
方案1:手动封装回调为Promise
将getManufactuters改写成返回Promise的函数即可,修改后代码如下:
const getManufactuters = () => { return new Promise((resolve, reject) => { sql.query('SELECT * FROM Manufacturer', (error, results) => { if (error) { console.log(error) return reject(error) } resolve(results) }) }) } const createProducts = async () => { const manufacturers = await getManufactuters() console.log(manufacturers) } createProducts()
修改后await即可正常等待Promise执行完成,拿到正确的查询结果。
方案2:使用Promise版本的MySQL驱动
如果不想每次手动封装回调,可以切换为支持Promise风格的MySQL驱动,原生支持async/await语法,无需额外处理回调逻辑。
内容的提问来源于stack exchange,提问作者Tom Lima
相关产品推荐
相关产品推荐

