Сериализованный запрос SQLite в Node - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь вернуть несколько таблиц данных из контроллера узла. Я знаю, что мог бы сделать это как один запрос с несколькими объединениями, но я явно хочу вернуть различные таблицы в виде отдельных объектов.

У меня есть следующее:

var db = new sqlite3.Database('database.sqlite', sqlite3.OPEN_READONLY);
module.exports = function(req, res) {
    var data = { tables: {} };
    db.serialize(function() {
        db.get(`
            SELECT *
            FROM Table1
            WHERE id = ?
        `, [req.params.id], (err, row) => {
            if (row) data.tables.Table1 = row;
        });
        db.get(`
            SELECT *
            FROM Table2
            WHERE id = ?
        `, [req.params.id], (err, row) => {
            if (row) {
                data.tables.Table2 = row;
                db.get(`
                    SELECT *
                    FROM Table2a
                    WHERE id = ?
                `, [data.tables.Table2.SubA], (err, row) => {
                    if (row) data.tables.Table2a = row;
                });
                db.get(`
                    SELECT *
                    FROM Table2b
                    WHERE id = ?
                `, [data.tables.Table2.SubB], (err, row) => {
                    if (row) data.tables.Table2b = row;
                });
            }
        });
        db.get(`
            SELECT *
            FROM Table3
            WHERE id = ?
        `, [req.params.id], (err, row) => {
            if (row) data.tables.Table3 = row;
            res.render('info', data);
        });
    }
}

Однако "Представление info отображает только таблицы 1, 2 и 3, а не таблицы 2a и 2b. Я мог бы понять это, если запросы выполняются параллельно, а таблица 3 запрашивается раньше, чем 2a и 2b, но я думаю, что функция db.serialize должна предотвратить это. Как мне сделать это правильно?

Ожидаемый объект данных должен быть:

data: { tables: { Table1: { ... }, Table2: { ... }, Table2a: { ... }, Table2b: { ... }, Table3: { ... } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...