我如何在Node.js中强制执行函数?



我正在制作一个网站,在这个网站上我可以了解世界各地的国旗。这个想法是在前面加载之前,我的后面选择一个随机的int,并从我的数据库中选择这个id的标志,然后显示它,以便然后尝试猜测标志。

我的问题是我的渲染是在我的函数选择一个随机标志之前执行的,所以我不能显示它。

我怎么能强迫getRandomFlags函数在我的ejs渲染之前执行?这真的是可能的,由于Node.js原则或有解决方案吗?

var maxIdDB;
var paysChoisi;
router.post('/', function (req, res) {
res.render("index.ejs",{extension: 'be.png'});
});
router.use('/', function (req, res) {
getRandomFlag();
res.render("index.ejs",{extension: 'fr.png'});
console.log('test');
});
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}
function getRandomFlag() {
db.get('SELECT MAX(id) FROM Flags;', (err, row) => {
maxIdDB = row['MAX(id)'];
})
var randomInt = getRandomInt(maxIdDB);
const statement = db.prepare('SELECT * FROM Flags WHERE id=?;');
statement.get(randomInt, (err,result) => {
setCountry(result);
});
}
function setCountry(result) {
paysChoisi = result;
console.log('set');
}

我试图加载它并刷新几次,直到我的paysChoisi变量被定义,但服务器和客户端不同步。我的意思是:

服务器:选择Japan

server:选择法国客户端:回答日本

服务器:选择肯尼亚客户端:回答法国

这里最简单的解决方案是使用回调

router.use('/', function (req, res) {
getRandomFlag(() => {
res.render("index.ejs",{extension: 'fr.png'});
console.log('test');
});
});
function getRandomFlag(callback) {
db.get('SELECT MAX(id) FROM Flags;', (err, row) => {
maxIdDB = row['MAX(id)'];
})
var randomInt = getRandomInt(maxIdDB);
const statement = db.prepare('SELECT * FROM Flags WHERE id=?;');
statement.get(randomInt, (err,result) => {
setCountry(result);
callback()
});
}

但是如果你用promises会更好

最新更新