В настоящее время я новичок в ionic (3) и пытаюсь создать приложение с поддержкой баз данных (чтобы пользователь мог использовать приложение, когда он не в сети).
Но у меня есть проблема, и я не могу понять, почему это так работает.
Что я и сделал.
Моя установка - приложение ionic3 на платформе Angular 5.
Для приложения на устройстве я использую плагин sqlite ionic it self, но я хочу смоделировать плагин, чтобы можно было проверить в браузере. Так что это мой код для макета.
export class SQLiteMock {
public create(config: SQLiteDatabaseConfig): Promise<SQLiteObject> {
let db = (<any> window).openDatabase(config.name, '1.0', 'test database', 2 * 1024 * 1024);
return new Promise((resolve, reject) => {
resolve(new SQLiteObject(db));
});
}}
// ------Init call from component------------------------
init(): Promise<boolean> {
return new Promise(resolve => {
this.sqlite.create({
name: 'test.db',
location: 'default'
}).then((db: SQLiteObject) => {
this.db = db;
});
}
);
}
Пока все хорошо. Когда я запускаю это, он работает на устройстве и в Интернете. Даже когда я создаю таблицы, все отображается правильно.
Проблема в том, что я вставляю запрос в базу данных со следующим кодом:
executeSql(queryStatement: string, params?: Array<string | number>): Promise<any> {
params = params ? params : [];
return new Promise((resolve, reject) => {
this.db.transaction((tx) => {
tx.executeSql(queryStatement, params,
(tx, result) => {
console.log(result); //--> console: SQLResultSet {rows: SQLResultSetRowList, insertId: 5, rowsAffected: 1}
console.log(Object.assign({}, result)); //--> console: {}
resolve(result);
},
(error) => reject(error));
});
});
}
То, что я хочу сделать, - это использовать insertId первого запроса и использовать его в следующем. Но, как вы можете видеть, когда обещание сработает, результат все еще будет пустым, поэтому следующий запрос не будет выполнен, так как идентификатор отсутствует.
Кто-нибудь знает, почему у меня такая проблема с временем?
И как я могу это исправить, что обещание ждет разрешения, пока не будет достигнут результат?
Уже большое спасибо за вашу помощь, потому что я действительно застрял с этим.
С уважением
Функция, которая вызывает функцию
execQuery(query: string, params?: Array<string | number>): Promise<number> {
return new Promise((resolve, reject) => {
this.db.executeSql(query, params)
.then((result: any) => {
resolve(result.insertId); //--> result = {}
})
.catch((e) => reject(e));
});
* *} Тысяча двадцать-один