避免在咖啡脚本中自动生成返回

Posted

技术标签:

【中文标题】避免在咖啡脚本中自动生成返回【英文标题】:avoiding auto generated returns in coffee script 【发布时间】:2017-03-12 08:49:52 【问题描述】:

如何摆脱咖啡脚本中自动生成的回报:

createHash = (password) ->
  bcrypt.genSalt 10, (err, salt) ->
    bcrypt.hash password, salt, (err, hash) ->
      hash

我明白了……

createHash = function(password) 
  return bcrypt.genSalt(10, function(err, salt) 
    return bcrypt.hash(password, salt, function(err, hash) 
      return hash;
    );
  );
;

...但我想要一个没有回报的解决方案:

createHash = function(password) 
  bcrypt.genSalt(10, function(err, salt) 
    bcrypt.hash(password, salt, function(err, hash) 
      return hash;
    );
  );
;

我如何完成这项工作?

【问题讨论】:

重复:***.com/q/7391493/660921 【参考方案1】:

默认情况下,CoffeeScript 函数返回其最后一个表达式的值,因此:

f = ->
    # Bunch of interesting things...
    6

相当于:

f = ->
    # Bunch of interesting things...
    return 6

因此returns 出现在转译的 javascript 中。

在 JavaScript 中,没有显式 return 的函数会隐式返回 undefined,因此它们返回相同的内容:

function()  
function()  return 
function()  return undefined 

把这两件事放在一起会给你两个选择:

    在函数底部抛出 undefined 以使用显式的 return 绕过隐式:

    createHash = (password) ->
      bcrypt.genSalt 10, (err, salt) ->
        bcrypt.hash password, salt, (err, hash) ->
          hash
        undefined
      undefined
    

    或者更好的是,使用空的return 明确表明您没有返回任何内容:

    createHash = (password) ->
      bcrypt.genSalt 10, (err, salt) ->
        bcrypt.hash password, salt, (err, hash) ->
          hash
        return
      return
    

第二个选项应该为您提供您正在寻找的 JavaScript:

var createHash;
createHash = function(password) 
  bcrypt.genSalt(10, function(err, salt) 
    bcrypt.hash(password, salt, function(err, hash) 
      return hash;
    );
  );
;

【讨论】:

以上是关于避免在咖啡脚本中自动生成返回的主要内容,如果未能解决你的问题,请参考以下文章

使用咖啡脚本自动完成放置后无法从 getPlace 获取价值

避免使用promises中的内存泄漏并在咖啡脚本中循环(无需等待)

减少咖啡脚本中的循环

Coffeescript 类不返回函数的最后一个语句

我的咖啡脚本中的条件语句在应该返回一个数字时返回一个布尔值[重复]

调用咖啡脚本定义的函数?