首页 文章

在离子3中的websql mock中获取查询ID(在其他查询中重用)

提问于
浏览
0

目前我是离子(3)的新手,我正在尝试构建一个支持数据库的应用程序(因此用户可以在离线时使用该应用程序) . 但我有一个问题,我无法理解它为什么会像这样工作 .

我做了什么 . 我的设置是Angular 5框架上的ionic3应用程序 . 对于设备上的应用程序,我使用离子它自己的sqlite插件,但我想模拟插件,所以我可以在浏览器中测试 . 所以这是我的模拟代码 .

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;
            });
        }
    );
}

到现在为止还挺好 . 当我运行它时,它可以在设备和网络上运行 . 即使我创建表格,一切都正确显示 .
问题是当我使用下一个代码在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));
        });
    });
}

我想要做的是使用第一个查询的insertedId,并在下一个查询中使用它 . 但正如您所看到的,当承诺消失时,结果仍为空,因此下一个查询将失败,因为没有Id .

有人知道为什么我有这个时间问题吗?
我怎样才能解决这个问题,即在结果存在之前,承诺会等待解决?

已经非常感谢你的帮助,因为我真的坚持这个 .

亲切的问候

调用该函数的函数

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

    您的第二个console.log指令发出空对象({})的原因似乎与Object.assign()函数有关,而不是WebSQL问题 . 根据documentation of Object.assign() function,只从源对象复制自己的可枚举属性 .

相关问题