gpt4 book ai didi

sqlite - Ionic2/Angular2 在查询之前等待 SQLite 数据库打开

转载 作者:太空狗 更新时间:2023-10-29 18:21:01 26 4
gpt4 key购买 nike

我将 Ionic 2 (Angular 2) 用于混合应用程序。我将一个共享提供程序注入(inject)到页面中,该页面将显示来 self 的 SQLite3 数据库的数据,然后继续加载数据。但是,在创建我的数据库提供程序时,打开数据库需要一些时间(很少)。然而,我的代码(截至目前)在查询之前没有等待数据库打开,这显然会导致错误。

如何构造我的代码,使其等待数据库打开以避免崩溃?

我的数据库提供者的构造函数:

constructor(private platform: Platform) {
this.platform.ready().then(() => {
if(this.isOpen !== true) {
this.storage = new SQLite();

this.storage.openDatabase({name: "data.db", location: "default"}).then(() => {
this.isOpen = true;
this.storage.executeSql("CREATE TABLE IF NOT EXISTS people (id INTEGER PRIMARY KEY AUTOINCREMENT, firstname TEXT, lastname TEXT)", []);
});
}
});
console.log('Hello Database Provider');

此提供程序被注入(inject)到我页面的构造函数中。

当页面(主页)加载时,它会触发调用 load() 函数的事件。

ionViewDidLoad() {
this.load();
console.log('Hello Home Page');

加载函数:

public load() {
this.database.getPeople().then((result) => {
this.itemList = <Array<Object>> result;
}, (error) => {
console.log("LOAD ERROR: ", error);
});

我非常希望有人能给我指出正确的方向:)

最佳答案

我终于找到了解决问题的方法。

对于初学者,我已经向我的提供程序添加了一个函数,用于检查数据库是否已加载,如果未加载,则继续加载它:

public openSQLiteDatabase() {
return new Promise((resolve, reject) => {
if(this.isOpen) {
console.log("DB IS OPEN");
resolve(this.isOpen);
}

else {
console.log("DB IS NOT OPEN");
this.platform.ready().then(() => {
this.storage.openDatabase({name: "data.db", location: "default"}).then(() => {
this.appsettings.openSQLiteDatabase().then(() => {
this.appsettings.getSettings().then((result) => {
let settings: Settings = <Settings> result;
this.selectedDataset = settings.selectedDataset;
this.isOpen = true;
resolve(this.isOpen);
});
});
}, (error) => {
reject(error);
});
});
}
});}

由于此函数返回一个 promise (JS Promises),它允许我在执行任何其他操作(例如查询)之前等待数据库打开。

我在特定于页面的 TypeScript 文件中的函数:

ionViewDidLoad() {
this.database.openSQLiteDatabase().then(() => {
this.loadDictionary();
});}

使用这样的代码,在我的数据库打开之前执行查询时,我从来没有遇到过问题!

关于sqlite - Ionic2/Angular2 在查询之前等待 SQLite 数据库打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40523168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com