Catch块不会在typescript中执行

时间:2016-08-26 23:47:38

标签: javascript date angular typescript

我有一个简单的管道,它将传递的参数格式化为日期格式。如果它是无效转换,则会引发错误。但它从来没有真正抛出一个错误落入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块?

1 个答案:

答案 0 :(得分: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 }`);
    }
}

这样即使在这种情况下也会引发错误。