Ioni c SQLite читает дочернюю таблицу, используя обещания - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь получить объект из базы данных, который называется treeLog. У treeLog есть дочерний объект с именем cuttingRegister. Вот как я запрашиваю treeLog в базе данных:

public getTreeLogById(idTreeLog: number){
        let db: SQLiteObject;
        db = this.dbService.getDatabase();
        return db.executeSql('select * from tree_logs where id = ?',[idTreeLog])
            .then((data: any) => {
                if(data.rows.length > 0){
                    let treeLog: TreeLogsModel = this.parseTreeLogToModel(data, 0);
                    return treeLog;
                }else{
                    return;
                }
            })
    }

Затем набор результатов анализируется в другой функции следующим образом:

private parseTreeLogToModel(data: any, i: number) {
        let treeLog: TreeLogsModel = new TreeLogsModel();
        treeLog.cuttingRegister = new CuttingRegisterModel();
        let treeLogDatabase = data.rows.item(i);
        treeLog.id = treeLogDatabase.id;
        treeLog.maxPartitionQuantity = treeLogDatabase.max_partition_quantity;
        this.getTreeById(treeLogDatabase.tree_id).then(tree => { treeLog.tree = tree });
        treeLog.logNumber = treeLogDatabase.log_number;
        this.getLabelById(treeLogDatabase.labels_id).then(label => { treeLog.labels = label });
        treeLog.rejectPiece = treeLogDatabase.reject_piece;
        this.getSpecieById(treeLogDatabase.species_id).then(specie => { treeLog.species = specie });
        treeLog.f1 = treeLogDatabase.f1;
        treeLog.f2 = treeLogDatabase.f2;
        treeLog.t1 = treeLogDatabase.t1;
        treeLog.t2 = treeLogDatabase.t2;
        treeLog.length = treeLogDatabase.length;
        treeLog.volume = treeLogDatabase.volume;
        treeLog.volumeString = treeLogDatabase.volume_string;
        treeLog.comments = treeLogDatabase.comments;
        this.getCuttingRegisterById(treeLogDatabase.cutting_register_id).then(cuttingRegister => { treeLog.cuttingRegister = cuttingRegister });
        treeLog.event = treeLogDatabase.event;
        treeLog.eventForList = treeLogDatabase.event_for_list;
        treeLog.isBlocker = treeLogDatabase.is_blocker;
        treeLog.listId = treeLogDatabase.list_id;
        treeLog.date = treeLogDatabase.date;
        treeLog.line = treeLogDatabase.line;
        this.getTreeLogById(treeLogDatabase.mother_tree_log_id).then(motherLog => { treeLog.motherTreeLog = motherLog });

        return treeLog;
    }

Дочерний объект, который я хочу извлечение из базы данных читается с использованием этого фрагмента кода, из функции выше:

this.getCuttingRegisterById(treeLogDatabase.cutting_register_id).then(cuttingRegister => { treeLog.cuttingRegister = cuttingRegister });

, которая, в свою очередь, вызывает эту функцию (которая похожа на функцию treeLog и также имеет свой собственный анализатор):

public getCuttingRegisterById(idCutting: number){
        let db: SQLiteObject;
        db = this.dbService.getDatabase();
        return db.executeSql('select * from cutting_register where id = ?',[idCutting])
            .then((data: any) => {
                if(data.rows.length > 0){
                    let cuttingRegister: CuttingRegisterModel = this.parseCuttingRegisterToModel(data, 0);
                    return cuttingRegister;
                }else{
                    return;
                }
            })
    }

Проблема в том, что объект cuttingRegister никогда не завершается до возвращения объекта treeLog, поэтому я всегда получаю дочерний объект undefined. Я немного понимаю концепцию, лежащую в основе promises, но я не могу найти правильный путь к go о чтении дочернего объекта с помощью обещаний и не нашел большой помощи в Google.

Как правильно реализовать то, что я пытаюсь сделать? Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...