执行此:
async initialize() {
try {
// Check connections consistency
await this.sqliteService.checkConnectionConsistency().then(async r => {
console.log(templateAppDataSource.isInitialized)
if (!templateAppDataSource.isInitialized) {
await templateAppDataSource.initialize().then(async _ => {
for (const dataSource of [templateAppDataSource]) {
const database = String(dataSource.options.database);
if (!dataSource.isInitialized) {
// initialize the DataSource
await dataSource.initialize();
console.log(`*** dataSource has been initialized ***`)
// run the migrations
await dataSource.runMigrations();
console.log(`*** dataSource runMigration has been run succesfully ***`)
// load the data for this datasource
console.log(`*** datasource and database has has been initialized ***`)
// }
if (this.sqliteService.getPlatform() === 'web') {
// save the databases from memory to store
await this.sqliteService.getSqliteConnection().saveToStore(database);
console.log(`*** inORMService saveToStore ***`)
}
}
console.log(`DataSource: ${database} initialized`);
}
this.isOrmService = true;
})
} else {
console.log("Connection Already Extrablsihed ")
}
});
// Loop through your DataSources
} catch (err) {
console.log(`Error: ${err}`);
}
}
当应用程序第一次加载时运行正常,但是在刷新页面时,initialize()
方法在第一个await
的中途跳出,并在其他页面上触发ngOnit
。ngOnit
正在获取一些数据,而db尚未初始化,因为async
函数尚未完成初始化?
有什么想法吗
1条答案
按热度按时间fcg9iug31#
这是一个基于您的代码和上下文的大胆猜测,但您可以尝试使用服务来初始化DB并知道它何时准备就绪。它可能是这样的:
src/app/services/database-init.service.ts
src/app/app.component.ts
现在你可以这样做:
这种方式不是很“开发友好”,因为你必须确保数据库在做任何事情之前已经准备好了。它也是非常“防故障”的,因为我们可以想象一个函数,它会定期确保数据库仍然正常,如果不正常,它会更新
dbIsReady$
可观察数据。通过这种方式,你可以通知用户发生了什么错误,然后按下reload。注意你也可以用一个微调器来“阻止”UI,例如直到数据库准备好。这将确保当用户浏览应用程序时,数据库被正确初始化。有很多方法可以做到这一点。使用Google ;)