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

时间:2016-10-29 18:39:04

标签: javascript hash coffeescript passwords

如何摆脱咖啡脚本中自动生成的退货:

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;
    });
  });
};

我是如何完成这项工作的?

1 个答案:

答案 0 :(得分:0)

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

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

相当于:

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

因此return出现在已编译的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
    
  3. 第二个选项应该为您提供您正在寻找的JavaScript:

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