【问题标题】: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;
    });
  });
};

我如何完成这项工作?

【问题讨论】:

标签: javascript hash coffeescript passwords


【解决方案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 }

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

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

    createHash = (password) ->
      bcrypt.genSalt 10, (err, salt) ->
        bcrypt.hash password, salt, (err, hash) ->
          hash
        undefined
      undefined
    
  2. 或者更好的是,使用空的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;
    });
  });
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2012-12-04
    • 2013-06-05
    • 2011-11-14
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    相关资源
    最近更新 更多