2017-02-17 7 views
0

Я пытаюсь проверить, существуют ли локально сохраненные данные и соответственно отобразить/скрыть части представления. Я делаю это, назначая истинным или ложным formMarkersDisplay так:Функция Promise Promise Issue

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); 
} 

Проблема заключается в том, что это .is_markers получает значение false, даже если я ожидаю true (что показано в console.log). Я изо всех сил пытаюсь поднять голову на работу с обещаниями. Я думаю, это может быть связано с этим.

Как изменить код, чтобы сделать эту работу?

+0

Вы должны вернуть обещание, а не переменный он мутирует –

+0

Есть другие проблемы в вашем коде также. Например, аннотация типа в этой строке не только бессмысленно, но и фактически препятствует тому, чтобы TypeScript ломал ошибки «let sectionSevenObj: any;». Похоже, вам нужно разобраться в своих основах JavaScript, учитывая странные вещи, которые вы делаете, такие как возврат значений, связанных с 'this' от методов на одном и том же объекте. –

+0

Я очень новичок в JS/TS. Как я могу вернуться к обещанию? Я ищу фактическую версию моего кода, чтобы указать мне в правильном направлении. – Muhammad

ответ

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; 
    }); 
} 
+0

Это прекрасно! Благодаря тонну! Я понял проблему, но изо всех сил пытался получить синтаксис правильно. – Muhammad