Я пытаюсь получить объект из базы данных, который называется 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.
Как правильно реализовать то, что я пытаюсь сделать? Заранее спасибо.