Получить идентификатор запроса в websql mock in ionic 3 (для повторного использования в другом запросе) - PullRequest
0 голосов
/ 03 июля 2018

В настоящее время я новичок в 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));
});
* *} Тысяча двадцать-один

1 Ответ

0 голосов
/ 03 июля 2018

Причина, по которой ваша вторая инструкция console.log отображает пустой объект ({}), скорее связана с функцией Object.assign (), чем с проблемой WebSQL. Согласно документации функции Object.assign () , только исходные перечисляемые свойства копируются из исходного объекта.

...