就是我需要在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})
})
所有异步方法,都应该有回调函数
好比你等快递,你可以每过一分钟就去快递站看看,也可以等快递小哥给你打电话你再下去
电话就是回调函数
你应该注册好回调函数,当收到数据了再推给前端
-=-=-=
这就好比你下单了个好物,那就应该等快递小哥给你打电话了你再去取
而不是下单了就往快递站跑
async await