我正在加载.json文件,将其保存到数组中并编辑一下数组。不幸的是,我是angular的新手,我不知道如何在Ionic4(Angular 7.2.2)中处理异步请求(以前仅在php和客户端js中开发)。
我的json文件的加载按预期工作。但是,如果我想通过循环来编辑文件,我认为在循环结束之前我的诺言就得到了解决。这是我的代码。显示输出的注释。我究竟做错了什么?您能推荐一些东西来更好地学习异步请求吗?
public getCategories()
{
let arrCategories;
return new Promise((resolve, reject) =>
{
this.getCategoriesData().subscribe(arrResult =>
{
console.log('Ln 32');
console.log(JSON.stringify(arrResult)); // Expected array
this.setAbkuerzungenDEAndBild(arrResult).then(arrKategorien =>
{
console.log('Ln 35');
console.log(JSON.stringify(arrKategorien)); // Output: []
resolve(arrKategorien);
},
error =>
{
reject('Failed loading Categories. [1]');
}
);
},
error =>
{
reject('Failed loading Categories. [2]');
}
);
});
}
private getCategoriesData() //Working as expected
{
const strUrl = 'assets/data/Kategorien.json';
return this.objHttp.get(strUrl).pipe(
map((res: Response) => res),
catchError(CategoriesService.handleError)
);
}
private setAbkuerzungenDEAndBild(arrCategories) //Returning [] after .then and later on the array as expected
{
let arrNewCategories = [];
return new Promise((resolve, reject) =>
{
this.objStorage.get('objSprache').then(async objSprache =>
{
await arrCategories.forEach((objKategorie, intIndex) =>
{
if (objKategorie.intFKSpracheID === objSprache.intSpracheID) //Wenn Sprache == ausgewählt
{
//set something
if (objKategorie.intFKSpracheID !== '1') //Sprache nicht de
{
for (let objKategorieDE of arrCategories)
{
//Set something
}
}
}
});
});
resolve(arrNewCategories);
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.2/angular.min.js"></script>
答案 0 :(得分:0)
我使用以下变通办法解决了自己的错误: 我将我的resolve()替换为
if(intIndex == arrCategories.length-1)
{
resolve(arrNewCategories);
}