2016-08-26 2 views
4

Ich habe eine einfache Pipe, die übergebene Parameter zum Datumsformat formatiert. Wenn es sich um eine ungültige Konvertierung handelt, wird ein Fehler ausgegeben. Aber es wirft niemals einen Fehler auf, um in den Catch-Block zu fallen.Catch-Block wird nicht in Typoskript ausgeführt

import {PipeTransform, Pipe} from 'angular2/core'; 

@Pipe({ 
    name: 'formatDate' 
}) 

export class FormatDatePipe implements PipeTransform { 
    transform(value: string): any { 
     let date: string; 
     try { 
      date = new Date(value).toLocaleDateString(); 
     } 
     catch (Exception) { 
      return value; 
     } 
     finally {    
      return date; 
     }   
    } 

Warum wird der catch-Block nicht ausgeführt, auch wenn ein ungültiges Datum überschritten wird?

+0

"endlich" sieht hier aus wie kaputt. Welcher Grund dafür hat überhaupt definiert? Warum nicht einfach 'Rückkehrdatum;'? –

+0

Das war nur zum Testen. Ich dachte, Versuch, Fang wird schließlich abgeschlossen. Nur eine Ahnung ! – user728630

Antwort

2

Wenn Sie ein ungültiges Datum an den Konstruktor übergeben, wird kein Fehler für alle Eingaben ausgegeben.

Sie können darüber lesen Sie hier: Fall-back to implementation-specific date formats, die auf diese "rough outline on how the parsing works" verweist.

Aber es scheint, dass, wenn es keinen Fehler werfen dann gibt es Invalid Date, so können Sie dies tun:

try { 
    date = new Date(value).toLocaleDateString(); 
    if (date === "Invalid Date") { 
     throw new Error(`invalid date value ${ value }`); 
    } 
} 

Und auf diese Weise wird ein Fehler auch in solchen Fällen werfen.