2017-02-17 1 views
0

로컬로 저장된 데이터가 있는지 확인하고 이에 따라 뷰의 일부를 표시/숨기려고합니다. 그래서 같은 formMarkersDisplay하는 참 또는 거짓을 할당하여이 작업을 수행 : getReportTypeScript 약속 함수 문제

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

그리고 여기에 있습니다 : :

여기
ionViewWillEnter() { 
    this.formMarkersDisplay = this.dataService.isNearMiss(this.appGlobal.getReportPrimaryKey()); 
} 

가 isNearMiss 기능입니다

getReport(pk) { 
    return this.storage.get(pk); 
} 

문제는이 때문이다 .is_markers는 true (Console.log에 표시됨)가 예상 되더라도 false로 설정됩니다. 나는 약속을 가지고 일하는 것을 두려워하고있었습니다. 나는 이것이 이것과 관련이있을 것이라고 생각한다.

이 코드를 수정하려면 어떻게해야합니까?

+0

수정하지 변수는 –

+0

코드에서 다른 문제가있다 변이합니다 게다가. 예를 들어,이 라인의 타입 주석은 무의미 할뿐만 아니라 TypeScript가 실수로 'let sectionSevenObj : any;'를 잡는 것을 방지합니다. 동일한 객체의 메서드에서 'this'에 바인딩 된 값을 반환하는 등의 이상한 일을 감안할 때 JavaScript 기본 사항을 브러시로 처리해야합니다. –

+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