function requestUser(sql, req){
return new Promise((resolve, reject) => {
db.query(
sql,
[req],
(err, rows) => {
if(err) reject(err);
resolve(rows);
});
}).then( rows => { return rows; });
}
let themes = await User.theme(user.id);
function requestUser(sql, req){
return new Promise((resolve, reject) => {
db.query(
sql,
[req],
(err, rows) => {
if(err) reject(err);
resolve(rows);
});
});
}
User.theme()
function theme(userId) {
return new Promise( resolve => {
var theme = ... // здесь код нахождения нужных данных и передачи их, допустим, в переменную theme
resolve(theme);
});
}
User.theme(...
- она вернула "промис в ожидании", и остаётся из её resolve данные забрать и применить куда надо. Применить можно либо дальше в thenUser.theme(user.id).then(theme => {
ctx.render('index', {
title: 'Главная страница',
userBy: user,
themes: themes,
});
});
let themes = await User.theme(...
await ctx.render('index',...
function foo(callback) {
var x = 'asdfg';
callback(x);
}
foo( data => {
console.log(data); // asdfg
});
function foo(callback) {
var x = 'asdfg';
callback(x);
}
foo( async data => {
var data = await Promise.resolve(data);
console.log(data); // asdfg
});
db.query(sql, [user.id], async (err, result) => {
if(err) console.error(err);
var res = await Promise.resolve(result);
console.log(res);
});
Как я догадываюсь, в Koa объект
ctx.state
- это то же самое, что в Express объектres.locals
.И если я правильно догадываюсь, то вы им не правильно пользуетесь (если я правильно, повторю, догадываюсь). Это, должно быть, то "пространство имён", которое в метод
ctx.render()
передаётся автоматически.Это значит, что надо примерно так в обработчике:
В метод render передаётся только имя шаблона, а всё остальное уже там автоматически.
Попробуйте на досуге. (и если это так, то я буду считать, что практически разобрался с этим Koa, чиста интуитивно; если попробуете - сообщите о результате).