我正在尝试检查本地存储的数据是否存在,并相应地显示/隐藏视图的部分。我是通过为formmarkersdisplay分配true或false来做到的:
ionViewWillEnter() {
this.formMarkersDisplay = this.dataService.isNearMiss(this.appGlobal.getReportPrimaryKey());
}
这是ISNEARMISS函数:
isNearMiss(pk) {
let sectionSevenObj : any;
this.getReport(pk).then((report) => {
if (report) {
sectionSevenObj = JSON.parse(report);
sectionSevenObj = sectionSevenObj.report.sections.section7;
if(Object.keys(sectionSevenObj).length != 0) {
this.is_markers = true;
} else {
this.is_markers = false;
}
}
});
return this.is_markers;
}
这是GetReport:
getReport(pk) {
return this.storage.get(pk);
}
问题在于,即使我期望为true,this.is_markers也会设置为false(在console.log中显示)。我一直在努力解决诺言。我认为这可能与此有关。
如何修改代码以使此工作?
是的,您可以使用承诺。代码中的问题是它是非阻止的,因此,当您输入this.getReport()
时,它将执行,然后沿着声明为其初始状态返回this.is_makers
,它不会等待this.getReport()
完成。
用于使用承诺,您可以做到这一点:
isNearMiss = (pk: any): Promise<boolean> => {
return new Promise<boolean>(ret => { //RET VAR IT'LL RETURN IN CASE OF SUCCESS
let sectionSevenObj : any;
this.getReport(pk).then((report) => {
if (report) {
sectionSevenObj = JSON.parse(report);
sectionSevenObj = sectionSevenObj.report.sections.section7;
if(Object.keys(sectionSevenObj).length != 0) {
ret(true); // it'll return true
} else {
ret(false);
}
}
});
})
}
并修改您的ionViewWillEnter
ionViewWillEnter() {
this.dataService.isNearMiss(this.appGlobal.getReportPrimaryKey()).then(ret =>{
// DO THE CODE IF RET IS TRUE OR FALSE, LIKE SETING this.formMarkersDisplay = ret;
});
}