coffeescript承诺链接功能定义

时间:2014-12-22 02:36:49

标签: javascript coffeescript q

当承诺在coffeescript中进行链接时,为此定义的函数需要绑定到'this'。

  $q.fcall somecall
  .then ((url)->
    dosomething()
    ).bind(this)
  .catch (err)->
    console.log 'error occured', err

但是,以上编译成以下内容,这是错误的。那怎么写呢?或者有没有办法让coffeescript代表这个?

  $q.fcall(somecall).then(((function(url) {
    dosomething()
  }).bind(this))["catch"](function(err) {
    return console.log('error occured', err);
  })));

2 个答案:

答案 0 :(得分:3)

使用=>而不是自己绑定它,它会更容易阅读并且更正确。

$q.fcall somecall
.then (url) =>
  dosomething()    
.catch (err)->
  console.log 'error occured', err

然而,由于你没有在你的功能中引用this,这并没有多大意义。您可能希望实际上直接将dosomething传递给then(),以便保留其ThisBinding

答案 1 :(得分:1)

仅仅因为你可以使用匿名函数并不代表你必须这样做。给回调名称通常会产生更清晰的代码:

some_descriptive_name = (url) ->
  dosomething()
the_error = (err) ->
  console.log 'error occurred', err

$q.fcall somecall
  .then some_descriptive_name.bind(@)
  .catch the_error

或者:

some_descriptive_name = (url) => # fat-arrow instead of bind
  dosomething()
the_error = (err) ->
  console.log 'error occurred', err

$q.fcall somecall
  .then some_descriptive_name
  .catch the_error

如果你的功能只是一行,那么匿名功能就可以了,但如果它们更长,那么很容易迷失在CoffeeScript的空白中。