我想运行3个数据库查询,然后渲染3个结果对象以供查看,因此我使用async await首先运行查询,但它似乎没有等待/工作,总是在运行查询之前发送空对象以供查看。找不到我出了问题的地方,我正在使用nodejs 12.16.1,不确定它的es6是否支持问题或其他。
var express = require('express');
var router = express.Router();
var reviewModel = require.main.require('./models/review-model');
var propertyModel = require.main.require('./models/property-model');
router.get('/', async function(req, res){
try{
req.cookies['username'] == null ? loginCookie = null : loginCookie = req.cookies['username'];
var getPromoteInfo = await propertyModel.getPromoteInfo(function(result){
if(result!=null) return result;
});
var getPromoteReview = await reviewModel.getPromoteReview(function(result2){
if(result2!=null) return result2;
});
var getLatest3reviews = await reviewModel.getLatest3reviews(function(result3){
if(result3!=null) return result3;
});
res.render('index', {property:getPromoteInfo, rating:getPromoteReview, testimonials:getLatest3reviews, loginCookie});
}
catch(err){console.log(err);}
});
module.exports = router;
型号代码:
var db = require('./db');
module.exports = {
getPromoteInfo: function(callback){
var sql = "select * from property where promote_status = 1;";
db.getResult(sql, null, function(result){
if(result){
callback(result);
}else{
callback(null);
}
});
}
}
您正在使用await
不会返回Promise
结果undefined
值的函数。因此,为了async/await
正常工作,您可以getPromoteInfo
按以下方式重写:
var db = require('./db');
module.exports = {
getPromoteInfo: function(){
return new Promise( (resolve, reject) => {
var sql = "select * from property where promote_status = 1;";
db.getResult(sql, null, function(result){
if(result){
resolve(result);
}else{
// you can decide whether to reject or not if no records were found
reject();
}
});
});
}
}
然后,您可以在快速处理程序中简单地执行await
此函数调用,而无需传递回调:
const getPromoteInfo = await propertyModel.getPromoteInfo();
请注意,您可以检查db
-client / library是否开箱即用地支持诺言-那么您不必手动将函数包装在诺言中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句