如何从带有离子存储的角度服务获得承诺的结果,而不是Promise 作为响应

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

我正在将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>

angular typescript async-await es6-promise ionic-storage
1个回答
0
投票

最简单的方法是将其转换为承诺:

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是一种方法。


0
投票

您可以使用async等待兑现承诺:

async getDefaultLanguage(): Promise<string> {
    const res = await this.storage.get('defaultLanguage');
    this.defaultLanguage = res || 'en';

    return this.defaultLanguage;
}

请记住,现在必须以异步方式调用getDefaultLanguage

© www.soinside.com 2019 - 2024. All rights reserved.