打字稿承诺功能问题



我正在尝试检查本地存储的数据是否存在,并相应地显示/隐藏视图的部分。我是通过为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;
  });
}

相关内容

  • 没有找到相关文章

最新更新