2016-08-26 3 views
4

У меня есть простая труба, которая форматирует переданные параметры в формат даты. Если это неверное преобразование, оно вызывает ошибку. Но он никогда не бросает ошибку в блок catch.Блок уловов не выполнен в машинописных текстах

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

Почему блок catch не выполнен, даже когда прошла недопустимая дата?

+0

'finally' выглядит как сломанный здесь. Какая причина для этого определена вообще? Почему не простая дата возврата? –

+0

Это было просто для тестирования. Я думал, что попытка поймать будет завершена, наконец. Просто догадка! – user728630

ответ

2

Если вы передадите недопустимую дату конструктору, то это не вызывает ошибку для всех входов, это зависит.

Вы можете прочитать об этом здесь: Fall-back to implementation-specific date formats, ссылаясь на «rough outline on how the parsing works».

Но мне кажется, что если он не выдаст ошибку, то она возвращает Invalid Date, так что вы можете сделать это:

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

И так он будет выдавать ошибку, даже в таких случаях.

Смежные вопросы