2017-02-17 11 views
0

ローカルに保存されているデータが存在するかどうかを確認し、それに応じてビューの一部を表示/非表示しようとしています。私はそうのようformMarkersDisplayするにはtrueまたはfalseを割り当てることによって、この操作を行います。getReportTypeScript Promise機能の問題

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を期待していてもfalseに設定されます(これはconsole.logに表示されます)。私は約束と一緒に働くことに頭を悩ましてきました。私はこれがそれに関連するかもしれないと思う。

このコードを変更するにはどうすればよいですか?

+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