我正在将Ionic Storage
用于本地存储。要使用存储,我创建了service
,在其中使用了getter和setter存储方法。
我想检查应用程序的负载,是否有任何值在存储上不可用,如果值在存储上不可用,则只希望进行实际的数据调用并将其设置为存储,但是下次在病房上想要从存储中读取而不是实际获取数据调用。
现在的问题是,当我的组件加载时,我正在调用服务的storage.get
方法,该方法花费时间,并且由于该组件的属性未设置为实际存储的正确值。
[此外,用于返回字符串值形式服务的方法不允许编写没有最终return语句的方法,如下面的代码所述[[我现在从Promise中添加了两个return语句,这似乎不正确设计给我,但没有它,我得到编译错误],并且由于Promise从存储获取响应所花费的时间,两个return语句都在不同的时间间隔执行,这导致从存储实际响应过度。
我不确定如何从承诺中管理这种情况,因为默认情况下离子存储会返回Promise。
getDefaultLanguage(): string {
this.storage.get('defaultLanguage').then((res) => {
return this.defaultLanguage = res || 'en';
});
return this.defaultLanguage;
}
[请让我知道如何在组件中保持执行,直到我通过Promise收到上述服务调用的响应,这样核心组件的逻辑才能正常工作,还希望有正确的方法来实现服务层,其中我希望将Promise的结果作为string
而不是promise<any>
。
最简单的方法是将其转换为承诺:
getDefaultLanguage(): Promise <string> {
return new Promise( (resolve, reject) => {
this.storage.get('defaultLanguage').then((res) => {
resolve(res || 'en');
});
});
}
您当前方法不起作用的原因是this.storage.get
是异步的。不能及时完成return this.defaultLanguage
的工作。将您的get
呼叫换成另一个Promise
是一种方法。
您可以使用async
等待兑现承诺:
async getDefaultLanguage(): Promise<string> {
const res = await this.storage.get('defaultLanguage');
this.defaultLanguage = res || 'en';
return this.defaultLanguage;
}
请记住,现在必须以异步方式调用getDefaultLanguage