问题遇到的现象和发生背景
就是我需要在results里面拿到i.ownerName,但是在实际运行的过程中由于getOwnerNamePromise是异步执行的,所以它还没来得及赋值就返回给前端了,这个问题怎么解决呢?
问题相关代码,请勿粘贴截图
// 定义拿到房主名字的函数
const getOwnerNamePromise = (id) => {
return new Promise((resolve, reject) => {
const selctSql = `SELECT name FROM owner WHERE id=?`
let name = ''
db.query(selctSql, [id], (err, results) => {
// 执行 SQL 语句失败
if (err) return res.send({ status: 1, message: err.message })
if (results.length > 0) {
name = results[0].name
} else {
name = '未有该业主'
}
resolve(name)
})
})
}
const getHouseListPromise = () => {
return new Promise ((resolve, reject) => {
// 定义 sql 语句
const sql = `SELECT * FROM house`
db.query(sql, (err, results) => {
// 执行 SQL 语句失败
if (err) return res.send({ status: 1, message: err.message })
// selct 语句查询返回的结果刚好是一个数组,但是我们需要给这个数组加上一个数据项
for (let i of results) {
const ownerId = i.owner
if (ownerId) {
i.owner = ownerId
// 查询房主名字
getOwnerNamePromise(ownerId).then((name) => {
i.ownerName = name
})
} else {
i.owner = null
i.ownerName = '未出售'
}
}
resolve(results)
})
})
}
// 得到房产信息列表
getHouseListPromise().then((results) => {
console.log(results)
res.send({ status: 0, data: results})
})