【发布时间】:2014-09-07 04:25:40
【问题描述】:
我使用的是Angular version of the $q library,但这也适用于original q library。
使用示例:
$q
.when(someFunction)
.then(function(){
// ..
})
.catch(function(){
// ..
})
.finally(function(){
// ..
});
很遗憾,某些函数名称(例如 finally)与 javascript 关键字冲突。
来自 Angular 参考:
"由于 finally 是 JavaScript 中的保留字,并且 ES3 不支持保留关键字作为属性名称,因此您需要调用 promise['finally'](callback) 之类的方法 让你的代码 IE8 和 Android 2.x 兼容。”
ECMA-262,官方标准,可在http://www.ecma-international.org/publications/standards/Ecma-262.htm 获得,声明:
7.6.1.1 关键字
以下标记是 ECMAScript 关键字,可能不用作 ECMAScript 程序中的标识符。
break do instanceof typeof case else new var catch finally return void continue for switch while debugger function this with default if throw delete in try
这意味着必须将第一个示例更改为以下代码才能使其与 IE8 一起使用:
$q
.when(someFunction)
.then(function(){
// ..
})
['catch'](function(){
// ..
})
['finally'](function(){
// ..
});
由于这段代码更难维护,我正在寻找一个 javascript 预处理器(可能是一个繁重的任务),它将第一个示例转换为 IE8 兼容版本。
有这样的预处理器吗?
【问题讨论】:
-
我不知道有哪一个。您可能必须自己实现。
-
@RevanProdigalKnight 你知道有源地图支持的好参考项目吗?
-
不幸的是,并非如此。当我实现C-style preprocessor 时,我没有使用源映射。
-
使用 esprima 和 escodegen 实际上很容易做到这一点。
-
附带说明,在原始 q 库中,可以使用
fin代替finally和fail代替catch。
标签: javascript