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

avoiding auto generated returns in coffee script

本文关键字:自动生成 返回 脚本 咖啡      更新时间:2023-09-26

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

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

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

默认情况下,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
    

第二个选项应该准确地给你正在寻找的JavaScript:

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