电容器 SQLite Web:错误:运行:ExecSet:在 saveToStore SetDBToStore 中:未定义

问题描述 投票:0回答:1

我目前在桌面网络(使用 Chrome 作为浏览器)上使用带有 Angular Ionic 的 Capacitor Community Sqlite 库时遇到问题。

@capacitor-community/sqlite

https://www.npmjs.com/package/@capacitor-community/sqlite

困难的是,错误只发生大约 1% 的时间(百分之一)。真的很难重现。这可能是我的应用程序中触发的某种竞争条件。

在浏览器中刷新页面后,我有时会收到此错误:

Error: Run: ExecSet: in saveToStore SetDBToStore: undefined

Error image

所以每当我使用插件初始化数据库时,每当我打开它时,这基本上都会发生

发生该错误后,对数据库的后续调用将失败并出现相同的错误:

Error: Run: ExecSet: in saveToStore SetDBToStore: undefined

Error: Query: <database-name> database not opened

到目前为止,我只在网络上注意到这个错误,但可以肯定的是,它也有可能在本机上发生,因为与在网络上开发时相比,我更少地查看控制台,而且我根本没有刷新那里的页面.

所以我的问题基本上是,这个错误的原因可能是什么,返回了未定义的值。

我认为这与 jeepSqliteElement 有关,因为在查看 SetDBToStore 的源代码时:

static async setDBToStore(mDb, dbName, store) {
    try {
        // export the database
        const data = mDb.export();
        // store the database
        await UtilsStore.saveDBToStore(dbName, data, store);
        return Promise.resolve();
    }
    catch (err) {
        return Promise.reject(`SetDBToStore: ${err.message}`);
    }
}

我也在网络上调用 saveToStore 方法,这里提到:

https://github.com/capacitor-community/sqlite/issues/545

我知道这可能看起来可以忽略不计,但应用程序每刷新 1/100 次就会完全中断,这也可能会阻止用户停留在页面上。

javascript html angular cordova capacitor
1个回答
0
投票

我用一个相当丑陋但有效的解决方案解决了这个问题:

错误发生在我的 downloadUserData 方法中,请参见下文:

之前的代码:

await firstValueFrom(this.createInitialDataService.isDatabaseInit$.pipe(filter(Boolean)));
this.dataSyncService.downloadUserData(activeTurbo).pipe(first()).subscribe();

通过添加 100 毫秒超时来修复该问题的代码:

await firstValueFrom(this.createInitialDataService.isDatabaseInit$.pipe(filter(Boolean)));
setTimeout(() => {this.dataSyncService.downloadUserData(activeTurbo).pipe(first()).subscribe(); 
}, 100); // give the app some time to breathe to prevent the infamous bug
© www.soinside.com 2019 - 2024. All rights reserved.