前一阵子在开发一个网页端图片管理器的项目中,当时我遇到了一个问题:我查询数据库可以得到正确的查询结果,但发送给前端时前端却只能接收到空数组,后来经过思考,我怀疑可能是查询时的异步问题导致的,也就是query这个函数本身是异步的,从而导致发给前端的是空数组(发送比得到结果时间更早)。
后来经过尝试,我使用了async + await + Promise来解决这个问题,话不多说,上代码。
indexRouter.get('/show',async (ctx,next) => { // 返回图片列表
let statement = 'SELECT * FROM imgtable'
let list = [];
// 获得查询结果
list = await new Promise((resolve,reject)=>{
return query.query(statement,(e,data) => {
if (e) {
console.log('出错了')
throw e;
}
else{
// console.log(data)
resolve(data) // 扔出去查到的数组
}
})
})
ctx.body = list
})
这里,new一个Promise对象并等待该对象中函数的执行,然后在return语句中执行查询,在查询成功时执行resolve,出错时抛出错误即可。
小生不才,如有错误之处,还望各位不吝赐教!q(≧▽≦q)