我在我的项目中使用了离子2和角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); }
我读到有解析模式(https://blog.thoughtram.io/angular/2016/10/10/resolving-route-data-in-angular-2.html),但我需要打多个电话,而不是像示例中那样只打给联系人。
所以问题是:如何等待对数据库的多次调用?
最佳答案
我想这里出了点问题
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); }
首先,将返回空数组,因为它是异步进程。
您需要遍历data.rows,然后像这样格式化返回数据。
getAllEmployees(): Promise<Employee[]> { let query = "SELECT * FROM employees"; return this.database.executeSql(query, []).then((data) => { let arr = []; for(let i = ; i < data.rows.length; ++i) { let emp = data.rows.item(i); let e = new Employee(); e.id = emp.id; e.firstname = emp.firstname; e.lastname = emp.lastname; arr.push(e); } return arr; }); }
注意.then()返回一个promise对象。
关于sqlite - 如何通过服务加载多个数据并在Angular2中等待它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42003460/