我正在尝试检查本地存储的数据是否存在,并相应地显示/隐藏部分视图。我这样做是通过为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);
}
问题是this.is_markers被设置为false,即使我期望为true(在console.log中显示)。我一直在努力与Promises合作。我认为这可能与此有关。
如何修改代码才能使其正常工作?
答案 0 :(得分:0)
是的,你可以使用承诺。您的代码中存在的问题是它是非阻塞的,所以当您输入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;
});
}