我构建了一个简单的web应用程序在cordova wbeview中运行,当我在android 4.1上安装它运行时没有问题,但是当我在Android 2.3.6上安装它时(很老了)
Unexpected token "catch" file.js LINE 134
这意味着这个捕获表达式无法工作:
$http({
'method':'GET',
'url': appWS + '/api/find'
}).then(function (response) {
//
}).catch(function (err) {
//
});
我无法理解为什么不支持catch可能太旧的android确定,但我怎么能解决这个问题?
谢谢,任何帮助表示赞赏
答案 0 :(得分:4)
尽管@Pointy指出,.catch()
是通常使用angualr承诺(以及q
库)的方式。我想这实际上是你正在测试的android版本中的一个错误(事实证明它适用于较新的版本)。
您可以尝试使用(等效)方括号表示法来调用该函数,如下所示:
$http(options)
.then( function () { /* do stuff */ } )
['catch']( function () { /* handle errors */ } );
或内部函数sintax
$http(options)
.then( function () { /* do stuff */ }, function () { /* handle errors */ } );
哪个可以解决问题。
答案 1 :(得分:2)
要理解的关键是旧版浏览器对"保留关键字"相当严格/保守,他们不确定如何在"未来&#中使用#" 34 ;. Java也不会与JavaScript交互。
最终,浏览器JavaScript引擎和浏览器对事物的混合方式变得充满信心(粗略地说,Java在网页中没有出现在源代码中,现在它很少以二进制.class形式出现),它是好吧放松约束"保留字不能在任何情境中使用"允许它们在可以安全理解解析的地方使用。
" NAME"函数NAME(){}的一部分是解析足够安全和明确的上下文之一。
另一个是Object.PROPERTY。
由于这些都是你需要的:Promise.catch(stuff),JavaScript允许在现代浏览器中使用。
Android 2设备没有现代浏览器/现代JavaScript引擎,因此,当您尝试使用此功能时会出现更具侵略性的语法错误。
@ Ed-Hinchliffe是正确的,他的解决方法就是你如何使用旧的JS引擎。