2015-07-21 7 views
1

Я использовал то и поймать мой АЯКС вызов:угловой ошибки ключевого слова подхвата на YUI минификации

 try { 
      ServiceData.getProductDetails(product).then(function(data) { 
        $scope.productDetails = data; 
       }) 
**Line 445**     .catch(function(fallback) { 
         $scope.buildProductDetails(product); 
        }); 
      } catch (err) { 
       $scope.buildProductDetails(product); 
      } 
     }; 
    } 
]); 

На минификации я получаю ошибку, что недействительный блок загвоздки:

[ERROR] 445:27:missing name after . operator 
[ERROR] 446:32:syntax error 
[ERROR] 447:22:'try' without 'catch' or 'finally' 
[ERROR] 448:20:missing ; before statement 
[ERROR] 449:24:syntax error 
[ERROR] 451:9:missing ] after element list 
[ERROR] 452:5:syntax error 
[ERROR] 453:2:syntax error 

Как сказать YUI, что .catch - это угловой захват, а не традиционная попытка улова. Pls помочь

ответ

2

.catch метод в AngularJS-х $q (используется $http) не то же самое, как catch постановкой try { ...} catch { ... блока. То, что try { вы используете неправильно, вы не должны использовать его.

Просто, чтобы сделать вещи яснее:

"catch(errorCallback) - сокращение для promise.then(null, errorCallback)". Это функция callend, когда вы вызываете reject внутри обещания. (https://docs.angularjs.org/api/ng/service/ $ q # the-prom-api)

Операция try ... catch - встроенный механизм JavaScript. Код внутри блока catch выполняется, когда вы используете throw 'some exception' внутри блока try.

Документация AngularJS для reject довольно понятна: «При сравнении отложенных/обещаний знакомого поведения try/catch/throw подумайте об отказе как ключевого слова throw в JavaScript». Хотя, чтобы быть в безопасности, я бы добавил: «Хотя концептуально похожи, не смешивайте их!» к этому :)