我已经使用了then和catch来进行我的ajax调用:
try {
ServiceData.getProductDetails(product).then(function(data) {
$scope.productDetails = data;
})
**Line 445** .catch(function(fallback) {
$scope.buildProductDetails(product);
});
} catch (err) {
$scope.buildProductDetails(product);
}
};
}
]);
在缩小时我得到无效catch块的错误:
[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是角度捕获而不是传统的try catch。 请帮忙
答案 0 :(得分:2)
AngularJS .catch
中的$q
方法(由$http
使用)与catch
块的try { ...} catch { ...
语句不同。您使用的try {
是错误的,您不应该使用它。
只是为了让事情更清楚:
" catch(errorCallback)
- promise.then(null, errorCallback)
"的简写。当你在诺言中调用reject时,它就是一个函数callend。 (https://docs.angularjs.org/api/ng/service/ $ Q#的承诺量-API)
try ... catch
语句是内置的JavaScript机制。当您在catch
块中使用throw 'some exception'
时,会执行try
块内的代码。
reject
的AngularJS文档非常清楚:"当将deferreds / promises与熟悉的try / catch / throw行为进行比较时,请将reject视为JavaScript中的throw关键字。"但是,为了安全起见,我添加" 虽然在概念上相似,但不要混淆它们!"对此:)