В настоящее время у меня есть рабочий код для запроса моего db и передачи значений в представление в узле.
router.get('/', function(req, res, next) {
sql.connect(config).then(() => {
return sql.query'select Project_Type_Desc from Project_Type';
}).then(result => {
res.render('newProject', {projects: result});
}).catch(err => {
console.log(err);
})
});
Однако может ли кто-нибудь показать мне, как запросить еще 4 таблицы и передать все эти значения на мой взгляд, пожалуйста?
Вы можете сделать Promise
цепь с помощью async
/ await
в Node v7+:
router.get('/', async (req, res, next) => {
await sql.connect(config)
try {
const projects = await sql.query('select Project_Type_Desc from Project_Type')
const result2 = await sql.query('another query')
const result2 = await sql.query('another query')
const result4 = await sql.query('another query')
res.render('newProject', {
projects,
result2,
result3,
result4
})
} catch (error) {
console.log(error)
}
})
Для одновременного запуска Promises используйте Promise.all
:
router.get('/', async (req, res, next) => {
await sql.connect(config)
const promises = Promise.all([
await sql.query('select Project_Type_Desc from Project_Type'),
const result2 = await sql.query('another query'),
const result2 = await sql.query('another query'),
const result4 = await sql.query('another query')
])
try {
const [projects, result2, result3, result4] = await promises
res.render('newProject', {
projects,
result2,
result3,
result4
})
} catch (error) {
console.log(error)
}
})
Каждый запрос возвращает обещание. Чтобы запускать все одновременно, вы можете использовать Promise.all()
, который вызовет ответ, когда все они вернутся. Например:
sql.connect(config)
.then(() => {
const projectPromise = sql.query'select Project_Type_Desc from Project_Type'
const otherTablePromise = ...
const anotherTablePromise = ...
return Promise.all(
projectPromise,
otherTablePromise,
anotherTablePromise
)
})
.then(([projectResult, otherResult, anotherResult]) =>
res.render('newProject', {projects: result})
)