Я использую Ionic 2 с Angular 2 в своем проекте. В корневом компоненте вы можете нажать кнопку «Добавить», чтобы добавить новый отчет через сложную форму и множество предварительно предоставленных данных (есть некоторые выборки, которые загружаются данными, извлеченными из базы данных sqlite). Теперь в моем «CreateReportComponent» у меня есть следующий конструктор для загрузки данных и присвоения их переменной локального массива:
selectEmployeeOptions: Employee[];
constructor(private dbService: DatabaseService) {
dbService.getAllEmployees().then(employees => {
this.selectEmployeeOptions = employees;
});
// load more data like tasks etc.
});
Но когда я хочу изменить эти данные в своем компоненте, массив пуст. Я пытался сделать это в ngOnInit(), но это тоже слишком рано.
Я хочу сделать что-то вроде этого, прежде чем компонент будет отображаться:
dbService.getAllEmployees().then(employees => {
this.selectEmployeeOptions = employees;
// modify data
this.selectEmployeeTitleOptions = employees.map((item) => {
return item.title;
});
console.log(JSON.stringify(this.selectEmployeeTitleOptions)) // --> empty
});
Но selectEmployeeTitleOptions пуст...
Функция в databaseService выглядит так:
getAllEmployees(): Promise<Emplyoee[]> {
let query = "SELECT * FROM employees";
let employeeList = [];
this.database.executeSql(query, []).then((data) => {
if(data.rows.length > 0) {
let e = new Employee();
e.id = data.rows.item(i).id;
e.firstname = data.rows.item(i).firstname;
e.lastname = data.rows.item(i).lastname;
employeeList.push(e);
}
}, (error) => {
// handle error
});
return Promise.resolve(employeeList);
}
Я читал, что есть шаблон Resolve (https://blog.thoughtram.io/angular/2016/10/10/resolving-route-data-in-angular-2.html) Но мне нужно сделать несколько вызовов и не только для контакты как в примере.
Итак, вопрос: как дождаться нескольких обращений к базе данных?