gpt4 book ai didi

javascript - 数据初始化 promise

转载 作者:行者123 更新时间:2023-11-29 23:27:24 25 4
gpt4 key购买 nike

我真的很难处理数据初始化和 promise 。我将 Ionic 3 与 Angular 和 Ionic 存储一起使用,但我的问题主要与 promise 的运作方式有关。

基本上我想实现以下目标:

  • 当我的应用程序启动时,它应该使用本地存储集合
  • 如果本地存储集合不存在或为空,则使用http创建一个新的
  • 如果 http 失败,使用本地数据创建一个集合。

到目前为止我的解决方案:

getNewsItems():Promise<any> {
return this.storage.get(this.newsKey).then((data) => {
if(data == null)
{
return (this.buildNewsItemsViaHttp());
} else {
return (data);
}
});
}

private buildNewsItemsViaHttp(){
return new Promise(resolve => {
this.http.get('some/url/to/fetch/data')
.subscribe(
data => {
this.newsCollection = data;
this.storage.set(this.newsKey, this.newsCollection);
resolve(this.newsCollection);
},
(err) => {
resolve (this.buildNewsItemsViaLocalJSON());
}
);
});
}

private buildNewsItemsViaLocalJSON() {
return new Promise(resolve => {
this.http.get('assets/data/newsCollectionLocal.json')
.subscribe(
data => {
this.newsCollection = data;
this.storage.set(this.newsKey, this.newsCollection);
resolve(this.newsCollection);
},
(err) => {
console.log(err);
}
);
});}

我不喜欢它的某些部分,例如在 promise 中返回 promise - 这实际上是一个问题吗?

提前致谢

最佳答案

一个干净的解决方案可能是使用 async\await 方法:

async buildNewsItemsViaHttp(){
return await this.http.get()....
}

async buildNewsItemsViaLocalJSON(){
return await this.http.get()....
}

async getNewsItems(){
return await this.storage.get()...
}

async getItems(){
return ((await this.getNewsItems()) || (await this.buildNewsItemsViaLocalJSON()) || (await this.buildNewsItemsViaHttp()));
}

用法:

const items = await this.getItems();

您可以优化资源,缓存它们并在每个函数中返回它们。示例:

async buildNewsItemsViaHttp(){
let result = cache.get(); // todo

if(!result){
result = await this.http.get()...
cache.set(result)
}

return result;
}

关于javascript - 数据初始化 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48610821/

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