module.exports.listGames = (id) => {
let query = 'SELECT * FROM test';
if (id) {
query += 'WHERE userid = ' + connection.escape(id);
}
connection.query(query, function(err, results) {
if (err) {
throw err;
}
return (results);
});
}
Объявите функцию javascript async и вызовите метод отсюда.
async function sendGames (req, res) {
var games = await db.listGames(req.query.game);
res.json(games);
}
Вы не можете сделать этого, потому что при сравнении родительского класса, компилятор не может быть уверен, что подкласс инициализирует его. Необходимо будет инициализировать его в конструкторе родителя и иметь дочерний вызов конструктор родителя:
public abstract class Parent {
protected final String birthmark;
protected Parent(String s) {
birthmark = s;
}
}
public class Child extends Parent {
public Child(String s) {
super(s);
...
}
}
Передайте его родительскому конструктору:
public abstract class Parent {
private final String birthmark;
public Parent(String s) {
birthmark = s;
}
}
public class Child extends Parent {
public Child(String s) {
super(s);
}
}
Другой выход Java способ сделать это должно, вероятно, иметь родительский класс, чтобы определить абстрактный "метод считывания" и сделать, чтобы дети реализовали его. Это не отличный способ сделать это в этом случае, но это в некоторых случаях это может быть точно, что Вы хотите.
Я сделал бы это как это:
public abstract class Parent
{
protected final String birthmark;
protected Parent(final String mark)
{
// only if this makes sense.
if(mark == null)
{
throw new IllegalArgumentException("mark cannot be null");
}
birthmark = mark;
}
}
public class Child
extends Parent
{
public Child(final String s)
{
super(s);
}
}
финал означает, что переменная может быть инициализирована однажды на экземпляр. Компилятор не может удостовериться, что каждый подкласс обеспечит присвоение на родинку, таким образом, это вынудит присвоение произойти в конструкторе родительского класса.
Я добавил проверку пустой указатель только, чтобы показать, что Вы также извлекаете пользу из способности проверить аргументы в одно место, а не каждого конструктора.
Почему бы не делегировать инициализацию к методу. Затем переопределите метод в родительском классе.
public class Parent {
public final Object x = getValueOfX();
public Object getValueOfX() {
return y;
}
}
public class Child {
@Override
public Object getValueOfX() {
// whatever ...
}
}
Это должно позволить пользовательскую инициализацию.
Да, заключительным участникам нужно присвоить в классе, в котором они объявляются. Необходимо добавить конструктора с Аргументом строки для Порождения.
Объявите конструктора в суперклассе, которым это называет подкласс. Необходимо установить поле в суперклассе, чтобы удостовериться, что это инициализируется, или компилятор не может быть уверен, что поле инициализируется.
Вы, вероятно, хотите иметь Родителя (Строковая родинка) конструктор так, чтобы можно было удостовериться в Родительском классе, что финал всегда инициализируется. Затем можно назвать супер (родинка) от Ребенка () конструктор.