当使用函数引用时,Coffeescript会奇怪地转换try / catch / finally块

时间:2015-12-07 21:33:03

标签: javascript angularjs coffeescript promise

我有一个帮助函数来处理错误。我试图将此作为参数传递给承诺中的catch函数:

  fetchRecords().then (found) ->
    $scope.recprds = found;
  .catch( Session.handleError )
  .finally( -> $scope.querying = false )

这会被解析为以下Javascript:

  fetchRecords().then(function(found) {
    return $scope.records = found;
  })["catch"](Session.handleError)["finally"](function() {
    return $scope.querying = false;
  });

由于finally不属于Session.handleError函数的属性,因此出现JavaScript错误。

我应该使用不同的语法吗?

Try it out on coffeescript.org

1 个答案:

答案 0 :(得分:2)

首先:你应该删除;和()不需要它们。

单词try catch,最后是保留字。您应该像coffeescript.org页面上的示例一样使用它们:

  fetchRecords().then (found) ->
    $scope.recprds = found
  .helpercatch Session.handleError 
  .helperfinally -> $scope.querying = false 

如果更改了函数名称,则coffeescript中的链接正在运行。所以你应该重命名你的帮助函数,链接应该可以工作。

fetchRecords().then(function(found) {
  return $scope.recprds = found;
}).helpercatch(Session.handleError).helperfinally(function() {
  return $scope.querying = false;
});

解析:

Webdriver