我想要具有回调的多个函数,并且此函数将返回DB的数据。一个例子:
getStates: function (callback) {
try {
dbExecution.executeQuery("SELECT * FROM Table",
function (err) {
console.log(err);
}, function (rowCount, more, rows) {
if (rowCount > 0) {
callback(rows);
} else {
callback(null);
}
});
} catch (ex) {
console.log(ex);
callback(null);
}
}
但是这个功能仅仅是一个,我有五个功能相同,但是得到不同的数据。 “主要”功能:
router.get('/content', sessionChecker, function (req, res) {
Module.getStates(function (data) {
res.render('info-user', { states: data });
});
Module.getReligion(function (data) {
res.render('info-user', { religions: data });
});
});
如何在不嵌套函数的情况下使用异步Java脚本调用5个函数(州,城市,宗教等)?
答案 0 :(得分:2)
更改每个get*
方法以返回Promise
(而不是使用回调),然后可以在这些Promise.all
的数组上使用Promises
。阵列中的所有Promise.all
都解析后,Promises
就会解析-然后,您可以res.render
:
getStates: () => new Promise((resolve, reject) => {
dbExecution.executeQuery("SELECT * FROM Table",
reject,
function(rowCount, more, rows) {
// if rowCount is 0, do you want to reject?
// if (rowCount === 0) reject();
resolve(rows);
}
)
})
然后,一旦所有功能都像上面一样:
router.get('/content', sessionChecker, function (req, res) {
Promise.all([
Module.getStates(),
Module.getReligion(),
]).then(([states, religions]) => {
res.render('info-user', { states, religions });
})
.catch((err) => {
// handle errors
});
});